乐于学习与分析
1、数据;
2、排序;
3、选择关键字;
节省内存,单片机中使用较多
2层循环就可以了
使用国外的c语言程序设计教程,多做习题,多多上机测试验证
很好的一款IDE工具
大数据分析,人工智能算法之类
RabbitMQ有两种对队列长度的限制方式
对队列中消息的条数进行限制 x-max-length
对队列中消息的总量进行限制 x-max-length-bytes
对消息总条数进行限制(总条数包括未被消费的消息+被消费但未被确认的消息):
public class QueueLengthLimit {
private static final String QUEUE_NAME = "queueLengthLimit";
public static void main(String[] argv) throws Exception {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("127.0.0.1");
factory.setPort(5672);
factory.setUsername("guest");
factory.setPassword("guest");
Connection connection = factory.newConnection();
Channel senderChannel = connection.createChannel();
Channel consumerChannel = connection.createChannel();
// 设置队列最大消息数量为5
Map<String, Object> args = new HashMap<String, Object>();
args.put("x-max-length", 5);
args.put("x-dead-letter-exchange","normal_exchange");
args.put("x-dead-letter-routing-key","normal");
senderChannel.queueDeclare(QUEUE_NAME, false, false, true, args);
// 发布6个消息
for (int i = 0; i < 6;) {
String message = "NO. " + ++i;
senderChannel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF-8"));
}
// 获取的消息为 NO. 2,说明队列头部第一条消息被抛弃
Thread.sleep(1000);
GetResponse resp = consumerChannel.basicGet(QUEUE_NAME, false);
String message = new String(resp.getBody(), "UTF-8");
System.out.printf("consume: %s\n", message);
System.out.printf("queue size: %d\n", resp.getMessageCount());
// 现在队列中有4个 Ready消息,1个 Unacked消息。此时再发布两条消息,应该只有 NO. 3 被抛弃。
senderChannel.basicPublish("", QUEUE_NAME, null, "NO. 7".getBytes("UTF-8"));
senderChannel.basicPublish("", QUEUE_NAME, null, "NO. 8".getBytes("UTF-8"));
Thread.sleep(100);
GetResponse resp2 = consumerChannel.basicGet(QUEUE_NAME, false);
message = new String(resp2.getBody(), "UTF-8");
System.out.printf("consume: %s\n\n", message);
// 现在队列中有4个 Ready消息,2个 Unacked消息。
// 此时Nack,消息2、4取消退回队列头导致队列消息数量超过设定值,谁能留下?
consumerChannel.basicNack(resp2.getEnvelope().getDeliveryTag(), true, true);
Thread.sleep(5000);
System.out.println("======================================");
while (true) {
resp = consumerChannel.basicGet(QUEUE_NAME, true);
if (resp == null) {
break;
} else {
message = new String(resp.getBody(), "UTF-8");
System.out.printf("consume: %s\n", message);
}
}
}
}
GetResponse resp.getMessageCount() 队列中未被消费的消息的数量,其中不包含被消费未确认的消息。
当队列中的消息要超过队列限制时,将失效队首元素,
这是接收死信的队列,可知被失效的消息是NO.1(队首) 试验验证结果真是上面结论。
第二种是对队列中消息总字节数进行限制:
Map args = new HashMap();
args.put("x-max-length-bytes ", 1000);
senderChannel.queueDeclare(QUEUE_NAME, false, false, true, args);
只计算消息体的字节数,不算消息投,消息属性等字节数。
RabbitMQ可以设置队列的最大优先级,也可以设置消息的优先级,优先级高的队列中的消息具有更高的被优先消费的权限。
可以通过如下参数:
队列的最大优先级:x-max-priority
消息的优先级:priority
队列优先级设置方式:
也可以通过代码去实现:
Map queueParam = new HashMap<>();
queueParam.put("x-max-priority",10);
channel.queueDeclare("queue_priority",true,false,false,queueParam);
配置了队列优先级之后,会在管理后台界面看到如下Pri的标记:
上面我们设置了队列的最大优先级,之后我们发送消息的时候便可以设置消息自身的优先级别,来调整消息被消费的优先级顺序。
AMQP.BasicProperties.Builder builder = new AMQP.BasicProperties.Builder();
builder.priority(5);
AMQP.BasicProperties build = builder.build();
channel.basicPublish("exchange_priority","rk_priority",build,("message-"+i).getBytes());
接下来我们看一个实现;
public class PriorityQueue {
public static void main(String[] args) throws Exception {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("127.0.0.1");
factory.setPort(5672);
factory.setUsername("guest");
factory.setPassword("guest");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
channel.exchangeDeclare("exchange_priority","direct",true);
Map<String,Object> queueParam = new HashMap<>();
queueParam.put("x-max-priority",10);
channel.queueDeclare("queue_priority",true,false,false,queueParam);
channel.queueBind("queue_priority","exchange_priority","rk_priority");
for(int i = 0 ; i < 10 ; i++){
AMQP.BasicProperties.Builder builder = new AMQP.BasicProperties.Builder();
if(i % 2 == 0){
builder.priority(5);
}
AMQP.BasicProperties build = builder.build();
channel.basicPublish("exchange_priority","rk_priority",build,("message-"+i).getBytes());
}
channel.close();
connection.close();
}
}
消费者代码:
public class PriorityConsumer {
public static void main(String[] args) throws Exception{
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("127.0.0.1");
factory.setPort(5672);
factory.setUsername("guest");
factory.setPassword("guest");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
while(true) {
GetResponse response = channel.basicGet("queue_priority", false);
System.out.println(new String(response.getBody()));
channel.basicAck(response.getEnvelope().getDeliveryTag(),false);
TimeUnit.MILLISECONDS.sleep(1000);
}
}
}
==》
message-0
message-2
message-4
message-6
message-8
message-1
message-3
message-5
message-7
message-9
阿里云首页可以看到,或者到优酷上看
被人举报,或者被识别为发送大量垃圾短信就被封了
手动安装(支持非阿里云服务器)
注意: 如果您已在服务器上安装了安全软件(如安全狗、云锁等),可能会导致安骑士 Agent 插件无法正常安装。建议您在安装安骑士 Agent 插件前确认您的服务器上是否存在这类安全软件,如果存在建议您先关闭、或卸载该安全软件之后,再安装安骑士 Agent 插件。
注意: 安装前请确认您安装安骑士服务器的环境:
服务器在阿里云上,直接安装即可
服务器不在阿里云上,服务器与阿里云通信走internet通信,安装后如果出现离线情况请参考:离线排查
服务器不在阿里云上,服务器与阿里云通过专线连接走内网通信,需要修改您的DNS配置,指定安骑士服务端DNS 解析地址:
106.11.68.13 jsrv.aegis.aliyun.com
106.11.250.224 update.aegis.aliyun.com
登录 云盾服务器安全(安骑士)管理控制台,单击 设置。
单击 安装安骑士 进入安装安骑士 Agent 页面。
安装安骑士Agent页面
根据您的服务器操作系统选择安装步骤,获取最新版本安骑士 Agent 插件。
Windows 系统
在安装安骑士 Agent 页面,单击 点击下载 下载最新版本安骑士 Agent 插件安装文件到本地计算机。
将安装文件上传至您的 Windows 服务器,例如通过 FTP 工具将安装文件上传到服务器。
在您的 Windows 服务器上以管理员权限运行安骑士 Agent 插件安装程序,完成安装。
注意:安骑士 Agent 插件安装过程中可能会提示您输入安装验证 Key。该安装验证 Key 将用于关联您的阿里云账号,在云盾服务器安全(安骑士)管理控制台登录您的阿里云账号即可保护您的服务器安全。
您可在云盾安装安骑士页面找到您的安装验证 Key。
安骑士Agent安装验证Key
Linux 系统
根据您的实际情况,在安装安骑士 Agent 页面选择 阿里云服务器 或 非阿里云服务器。
以管理员身份登录您的 Linux 服务器。
根据您的服务器,选择32位或64位的安装命令并复制至您的 Linux 服务器上。
执行安装命令即可完成安骑士Agent插件的下载及安装。
注意:该安装命令包含从阿里云站点下载最新的安骑士 Agent 插件,请确认您的服务器已连接公网。
安骑士 Agent 插件安装完成约五分钟后,您即可在云盾服务器安全(安骑士)管理控制台中查看您服务器的在线情况:
阿里云服务器将会从离线变成在线。
非阿里云服务器将会被添加至您的服务器列表中。
验证 Agent 安装
在您成功安装安骑士 Agent 后,建议您参考以下步骤进行验证:
检查您的服务器上安骑士 Agent 的 AliYunDun 和 AliYunDunUpdate 这两个进程是否正常运行。关于安骑士 Agent 进程说明,请参考 Agent说明。
在您的服务器上,执行以下 telnet 命令检查您的服务器是否能正常连通安骑士服务器。
注意: 确保以下 jsrv 和 update 两类服务器域名各至少有一个服务器能连通。
telnet jsrv.aegis.aliyun.com 80
telnet jsrv2.aegis.aliyun.com 80
telnet jsrv3.aegis.aliyun.com 80
telnet update.aegis.aliyun.com 80
telnet update2.aegis.aliyun.com 80
telnet update3.aegis.aliyun.com 80
如果安骑士 Agent 安装验证失败,请参考 Agent 离线排查。
注意事项
非阿里云服务器必须通过安装程序(Windows)或脚本命令(Linux)方式安装安骑士 Agent 插件。
如果您的非阿里云服务器通过以下方式安装安骑士 Agent 插件,需要删除安骑士 Agent 插件目录后,按照上述手动安装步骤重新安装安骑士 Agent 插件。
通过已安装安骑士 Agent 插件的镜像批量安装服务器。
从已安装安骑士 Agent 插件的服务器上直接复制安骑士 Agent 插件文件。
安骑士 Agent 插件文件目录
Windows: C:Program Files (x86)AlibabaAegis
Linux: /usr/local/aegis
如果您决定不再使用云盾服务器安全(安骑士)服务的所有功能,您可以选择以下方式进行卸载安骑士 Agent。
注意: 安骑士 Agent 卸载后,控制台中该主机资产的保护状态将变更为离线状态,您可以使用解绑功能删除处于离线状态的主机资产的记录。
自动卸载安骑士 Agent
您可以通过以下方式在云盾服务器安全(安骑士)管理控制台中自动卸载安骑士 Agent:
注意: 通过该种方式卸载指定主机安骑士,请务必确保当前机器安骑士处于在线状态,否则无法接收到卸载指令。如果卸载后重新安装安骑士,请手工进行安装,忽略期间的报错,重复操作3次以上(安骑士卸载会有一段保护期24小时或重复执行3次以上安装命令)。
登录 云盾服务器安全(安骑士)管理控制台,单击 设置。
单击 安装安骑士, 进入安装安骑士 Agent 页面。
单击页面右上方的 卸载安骑士。
卸载安骑士
在弹出的 卸载提示 对话框中,选择您决定卸载安骑士 Agent 的服务器,单击 确认卸载。
卸载提示
系统将自动卸载您选择的服务器上的安骑士 Agent。
手动卸载安骑士 Agent
您也可以参考以下步骤手动卸载您服务器上的安骑士 Agent。
Linux 系统服务器
登录您的 Linux 系统服务器。
执行以下命令下载安骑士 Agent 卸载脚本。
wget http://update.aegis.aliyun.com/download/uninstall.sh
依次执行以下命令卸载安骑士 Agent。
chmod +x uninstall.sh
./uninstall.sh
Windows系统服务器
登录您的 Windows 系统服务器。
在您的服务器上下载 安骑士 Agent 卸载脚本。
注意: 您也可以将安骑士 Agent 卸载脚本文件下载至本地计算机后,通过 FTP 文件传输工具将脚本文件上传至您的服务器后执行卸载。
双击 uninstall.bat 文件执行脚本卸载安骑士 Agent。
服务器安全(安骑士)Agent 插件已集成于公共镜像中。如果您在购买 ECS 实例时选择公共镜像并选择启用 安全加固 选项的话,安骑士 Agent 插件一般都已经默认安装在镜像中。
公共镜像安全加固选项
您可以登录 云盾服务器安全(安骑士)管理控制台 - 资产管理 页面,查看您所有服务器的安骑士 Agent 在线状态。
若您的服务器安骑士 Agent 显示离线状态,请按照以下方式手动下载并安装安骑士 Agent 插件。
手动安装(支持非阿里云服务器)
注意: 如果您已在服务器上安装了安全软件(如安全狗、云锁等),可能会导致安骑士 Agent 插件无法正常安装。建议您在安装安骑士 Agent 插件前确认您的服务器上是否存在这类安全软件,如果存在建议您先关闭、或卸载该安全软件之后,再安装安骑士 Agent 插件。
注意: 安装前请确认您安装安骑士服务器的环境:
服务器在阿里云上,直接安装即可
服务器不在阿里云上,服务器与阿里云通信走internet通信,安装后如果出现离线情况请参考:离线排查
服务器不在阿里云上,服务器与阿里云通过专线连接走内网通信,需要修改您的DNS配置,指定安骑士服务端DNS 解析地址:
106.11.68.13 jsrv.aegis.aliyun.com
106.11.250.224 update.aegis.aliyun.com
登录 云盾服务器安全(安骑士)管理控制台,单击 设置。
单击 安装安骑士 进入安装安骑士 Agent 页面。
安装安骑士Agent页面
根据您的服务器操作系统选择安装步骤,获取最新版本安骑士 Agent 插件。
Windows 系统
在安装安骑士 Agent 页面,单击 点击下载 下载最新版本安骑士 Agent 插件安装文件到本地计算机。
将安装文件上传至您的 Windows 服务器,例如通过 FTP 工具将安装文件上传到服务器。
在您的 Windows 服务器上以管理员权限运行安骑士 Agent 插件安装程序,完成安装。
注意:安骑士 Agent 插件安装过程中可能会提示您输入安装验证 Key。该安装验证 Key 将用于关联您的阿里云账号,在云盾服务器安全(安骑士)管理控制台登录您的阿里云账号即可保护您的服务器安全。
您可在云盾安装安骑士页面找到您的安装验证 Key。
安骑士Agent安装验证Key
Linux 系统
根据您的实际情况,在安装安骑士 Agent 页面选择 阿里云服务器 或 非阿里云服务器。
以管理员身份登录您的 Linux 服务器。
根据您的服务器,选择32位或64位的安装命令并复制至您的 Linux 服务器上。
执行安装命令即可完成安骑士Agent插件的下载及安装。
注意:该安装命令包含从阿里云站点下载最新的安骑士 Agent 插件,请确认您的服务器已连接公网。
安骑士 Agent 插件安装完成约五分钟后,您即可在云盾服务器安全(安骑士)管理控制台中查看您服务器的在线情况:
阿里云服务器将会从离线变成在线。
非阿里云服务器将会被添加至您的服务器列表中。
验证 Agent 安装
在您成功安装安骑士 Agent 后,建议您参考以下步骤进行验证:
检查您的服务器上安骑士 Agent 的 AliYunDun 和 AliYunDunUpdate 这两个进程是否正常运行。关于安骑士 Agent 进程说明,请参考 Agent说明。
在您的服务器上,执行以下 telnet 命令检查您的服务器是否能正常连通安骑士服务器。
注意: 确保以下 jsrv 和 update 两类服务器域名各至少有一个服务器能连通。
telnet jsrv.aegis.aliyun.com 80
telnet jsrv2.aegis.aliyun.com 80
telnet jsrv3.aegis.aliyun.com 80
telnet update.aegis.aliyun.com 80
telnet update2.aegis.aliyun.com 80
telnet update3.aegis.aliyun.com 80
如果安骑士 Agent 安装验证失败,请参考 Agent 离线排查。
注意事项
非阿里云服务器必须通过安装程序(Windows)或脚本命令(Linux)方式安装安骑士 Agent 插件。
如果您的非阿里云服务器通过以下方式安装安骑士 Agent 插件,需要删除安骑士 Agent 插件目录后,按照上述手动安装步骤重新安装安骑士 Agent 插件。
通过已安装安骑士 Agent 插件的镜像批量安装服务器。
从已安装安骑士 Agent 插件的服务器上直接复制安骑士 Agent 插件文件。
安骑士 Agent 插件文件目录
Windows: C:Program Files (x86)AlibabaAegis
Linux: /usr/local/aegis
ECS本身可以直接修改服务器名称
当然可以使用
目前阿里云的安骑士支持安装在非阿里云的服务器上
1、按住“Ctrl"键,滚动鼠标中间的滚轮,把文档多页显示。差不多能显示65页内容。
2、然后在光标停在需要选中的前边,按住Shift键,在结束的地方点一下,就能把中间全部选中了。
头文件是否添加了,另外比较一下使用的函数拼写与头文件,库文件中定义声明的是否一致,包括大小写
奖品丰富啊,怎么是小米音响不是,天猫精灵
问答7日激励计划的奖品能不能换一样啊,已经有这个奖品了
已完成7天活动
去年阿里云运行大会的redis专场有同学讲了redis迁移的你可以去找找那个资料,现在有点忘记具体的操作流程了
提交工单吧