5.1.2、Receiver1.javaimport com.rabbitmq.client.Channel;import com.rabbitmq.client.Connection;import com.rabbitmq.client.QueueingConsumer;import top.san.RabbitMq.util.RabbitmqConnectionUtil;import java.io.IOException;public class Receiver1 {private final static String QUEUE_NAME = "queue_topic";private final static String EXCHANGE_NAME = "exchange_topic";private final static String EXCHANGE_TYPE = "topic";public static void main(String[] args) throws IOException, InterruptedException {Connection connection = RabbitmqConnectionUtil.getConnection();Channel channel = connection.createChannel();channel.queueDeclare(QUEUE_NAME, false, false,false, null);//第二参数就是去匹配我兴趣的topicchannel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "lbw.nb.*");channel.basicQos(1);QueueingConsumer consumer = new QueueingConsumer(channel);channel.basicConsume(QUEUE_NAME, false, consumer);while(true){QueueingConsumer.Delivery delivery = consumer.nextDelivery();String message = new String(delivery.getBody());System.out.println("[x] Received1 '"+message + "'");Thread.sleep(10);channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);}}}
5.1.3、Receiver2.javaimport com.rabbitmq.client.Channel;import com.rabbitmq.client.Connection;import com.rabbitmq.client.QueueingConsumer;import top.san.RabbitMq.util.RabbitmqConnectionUtil;import java.io.IOException;public class Receiver2 {private final static String QUEUE_NAME = "queue_topic2";private final static String EXCHANGE_NAME = "exchange_topic";private final static String EXCHANGE_TYPE = "topic";public static void main(String[] args) throws IOException, InterruptedException {Connection connection = RabbitmqConnectionUtil.getConnection();Channel channel = connection.createChannel();channel.queueDeclare(QUEUE_NAME, false, false,false, null);//第二参数就是去匹配我兴趣的topicchannel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "lbw.#");channel.basicQos(1);QueueingConsumer consumer = new QueueingConsumer(channel);channel.basicConsume(QUEUE_NAME, false, consumer);while(true){QueueingConsumer.Delivery delivery = consumer.nextDelivery();String message = new String(delivery.getBody());System.out.println("[x] Received2 '"+message + "'");Thread.sleep(10);channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);}}}
5.1.4、结果-分析话题的特色就是队列可以获取自己感兴趣的话题消息,可以通过通配符*或#来表示匹配所有的感兴趣的字符串 。
文章插图
文章插图
文章插图
文章插图
文章插图
6、RPC(远程过程调用)给张图自己体会吧(官网没给示例代码,我也就不写了),就是通过两个交换机实现一个可回调的过程吧 。
文章插图
三、RabbitMq的交换机RabbitMq是有一个交换机的概念的,消息(Message)由Client发送,RabbitMQ接收到消息之后通过交换机转发到对应的队列上面 。Worker会从队列中获取未被读取的数据处理 。这样就可以实现消息的发送者无需知道消息使用者的存在,反之亦然 。Direct exchange:直连(路由)交换机,转发消息到routigKey指定的队列
Fanout exchange:扇形交换机,转发消息到所有绑定队列(相当于广播)
Topic exchange:主题交换机,按规则转发消息(很灵活)
Headers exchange:首部交换机
文章插图
前面的简单类型我们都是忽略了交换机的参数的,如该方法:channel.basicPublish("", QUEUE_NAME, null, message.getBytes());就是这个方法的第一个参数,置空说明使用了默认的交换机 。
有几种交换类型可用:direct,topic,headers 和fanout 。
作者:小小卡尔
原文链接:https://blog.csdn.net/weixin_44185736/article/details/106574637
【RabbitMq七种工作模式,结合简单的java实例使用,别再说你不会】
推荐阅读
- 计算机专业学什么语言好找工作?
- 残疾人|本科没拿到学位证对以后找工作有多大影响?
- 鲜虾萝卜饼的做法
- 没有工作的一年|《没有工作的一年》赚钱还是躺平?小雨租房也乐观,却源于这一点
- 招聘|考研究生反而不好找工作,日本人这点很认真,大家觉得应该学吗?
- 教师|想上岸入编找到理想工作,该如何选择单位?随我一起来看看吧!
- 犀角化毒丸怎么样
- 戴尔Precision 5750移动工作站深度测试
- 教你快速清除Excel工作表保护密码
- excel批量拆分工作簿,用VBA一键拆分,把数据分解到N个工作簿