本文介绍: 3.消息需要完全事先在队列中,在被消费者消费 会被排序,否则边生产边消费不会达到预期的队列优先效果。1.队列设置优先级 权制范围(0-255)推荐0-10 否则浪费CPU与内存。推荐:0-10 CPU性能友好。2.发消息时给消息设置优先级。0-255越大越优先。
注意事项:
1.队列设置优先级 权制范围(0-255)推荐0-10 否则浪费CPU与内存
2.发消息时给消息设置优先级
3.消息需要完全事先在队列中,在被消费者消费 会被排序,否则边生产边消费不会达到预期的队列优先效果。
优先级队列:
0-255越大越优先
推荐:0-10 CPU性能友好
先生产者生产消息:
package com.esint.rabbitmq.work07;
import com.esint.rabbitmq.RabbitMQUtils;
import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Channel;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
public class Producer {
public static final String QUEUE_NAME = "hello";
public static void main(String[] args) throws Exception {
Channel channel = RabbitMQUtils.getChannel();
Map<String, Object> arguments = new HashMap<>();
//队列设置优先即参数范围
arguments.put("x-max-priority",10);//官方允许0-255 此处设置10 允许优先级范围 0-10 不设置过大 浪费CPU和内存
channel.queueDeclare(QUEUE_NAME,false,false,false,arguments);
//注意上面要求的 需要事先 发送完毕消息 才能体显现优先级的消息优化排序
for (int i = 0; i < 10; i++) {
String message = "msssage" + i;
if(i == 3 ){
//本实验的核心操作再次 在这里构建优先级设置参数 设置这个优先级的值需要在前面设置对立参数范围内
AMQP.BasicProperties properties = new AMQP.BasicProperties().builder().priority(5).build();
channel.basicPublish("",QUEUE_NAME,properties,message.getBytes(StandardCharsets.UTF_8));
}else{
channel.basicPublish("",QUEUE_NAME,null,message.getBytes(StandardCharsets.UTF_8));
}
}
}
}
消费者消费消息:
package com.esint.rabbitmq.work07;
import com.esint.rabbitmq.RabbitMQUtils;
import com.rabbitmq.client.CancelCallback;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.DeliverCallback;
import com.rabbitmq.client.Delivery;
public class Comsumer {
public static final String QUEUE_NAME = "hello";
public static void main(String[] args) throws Exception {
Channel channel = RabbitMQUtils.getChannel();
DeliverCallback deliverCallback = ( consumerTag, message)->{
System.out.println(new String(message.getBody(),"UTF-8"));
};
CancelCallback cancelCallback = (consumerTag)->{
};
channel.basicConsume(QUEUE_NAME,true,deliverCallback,cancelCallback);
}
}
package com.esint.rabbitmq;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
public class RabbitMQUtils {
public static Channel getChannel()throws Exception{
//创建链接工厂
ConnectionFactory connectionFactory = new ConnectionFactory();
//设置链接
connectionFactory.setHost("192.168.43.37");
connectionFactory.setUsername("admin");
connectionFactory.setPassword("admin");
//链接工厂创建链接
Connection connection = connectionFactory.newConnection();
//获取信道
Channel channel = connection.createChannel();
return channel;
}
public static final void Sleep(int nums) {
try {
Thread.sleep(nums * 1000);
}catch (InterruptedException _ignored){
Thread.currentThread().interrupt();
}
}
}
产生的结果:
Connected to the target VM, address: '127.0.0.1:59793', transport: 'socket'
msssage3
msssage0
msssage1
msssage2
msssage4
msssage5
msssage6
msssage7
msssage8
msssage9
原文地址:https://blog.csdn.net/qq_17040587/article/details/134662366
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_6793.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。