威尼斯888_www.wns888.com_威尼斯wns888官网
做最好的网站
威尼斯888 > 计算机网络 / 编程 > 队列对来自这个交换器中的信息感兴趣

原标题:队列对来自这个交换器中的信息感兴趣

浏览次数:140 时间:2019-10-05

在上八个课程中大家成立了多少个扇形(fanout)交流器。大家能把音信已广播的款型传递给八个顾客。

要做什么样?Routing 路由

在那个科目中,加多叁个新的性状,大家得以只订阅音讯的一有的。比如,将只连接大家感兴趣的颜色("orange", "black", "green"),并且把音讯全体打字与印刷在调整台上。

绑定

调换器和队列是一种绑定关系。轻便的知晓为:队列对来源那么些交流器中的音信感兴趣。

绑定能够拉长四个外加的参数routingKeySpring-amqp行使简单明了的API使它们之间的涉嫌十二分清晰。把交换器和队列放入BindingBuilder中并能够很轻巧的把队列用路由键(routingKey)绑定到交流器上。

@Beanpublic Binding binding0a(DirectExchange directExchange, Queue autoDeleteQueue0) { return BindingBuilder.bind(autoDeleteQueue0).to(directExchange).with;}

本条代表,绑定键正视沟通器类型,fanout调换器就十一分未有能够绑定的选项。

直连调换器

前三个学科中我们的消息系统是以广播的格局传递给持有的买主。大家想要扩展一下成效,插足基于颜色类型的过滤器。举例,大家想要程序一个吸取详细的失实音讯并写入硬盘作为日志,不接收Info大概警告日志。

  • fanout调换器不可能兑现那个操作,因为它不得不笨笨的播放。

  • 咱俩采纳直连direct沟通器代替。直连交流器背后的路由算法很轻易,绑定的键要准确相配音信的路由键后,那些音讯手艺进来队列中。

    图片 1月光蓝、石黄、浅绿灰三种路由键

如上海教室,直连调换器x上绑定了2个连串。第八个类别使用路由键是orange,第1个有2个路由键,blackgreen

在那么些设定中,把一个利用路由键为orange的消息推送到沟通器上时,那么那么些音讯将会被路由到行列Q1上。新闻使用的路由键是black或者green时将会被路由到Q2。其余未有选用路由键的音信将会被裁撤。

并联绑定

图片 2并联绑定

那几个能够完毕类似fanout沟通器的法力。

  • Config.java
package com.zb.rabbitMQtest.t4routing.config;import org.springframework.amqp.core.*;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;/** * @author 张博 */@Configuration(value = "t4Config")public class Config { /** * 创建人:张博 * 时间:2018/3/5 上午10:45 * @apiNote 定义直连交换器 */ @Bean public DirectExchange directExchange() { return new DirectExchange("direct-exchange"); } /** * 创建人:张博 * 时间:2018/3/5 上午10:48 * @apiNote 定义自动删除匿名队列 */ @Bean public Queue autoDeleteQueue0() { return new AnonymousQueue(); } /** * 创建人:张博 * 时间:2018/3/5 上午10:48 * @apiNote 定义自动删除匿名队列 */ @Bean public Queue autoDeleteQueue1() { return new AnonymousQueue(); } /** * 创建人:张博 * 时间:2018/3/5 上午10:48 * @param directExchange 直连交换器 * @param autoDeleteQueue0 自动删除队列 * @apiNote 绑定使用路由键为 orange 的 autoDeleteQueue0 队列到直连交换器上 * @return Binding */ @Bean public Binding binding0a(DirectExchange directExchange, Queue autoDeleteQueue0) { return BindingBuilder.bind(autoDeleteQueue0).to(directExchange).with; } /** * 创建人:张博 * 时间:2018/3/5 上午10:48 * @param directExchange 直连交换器 * @param autoDeleteQueue0 自动删除队列 * @apiNote 绑定使用路由键为 black 的 autoDeleteQueue0 队列到直连交换器上 * @return Binding */ @Bean public Binding binding0b(DirectExchange directExchange, Queue autoDeleteQueue0) { return BindingBuilder.bind(autoDeleteQueue0).to(directExchange).with; } /** * 创建人:张博 * 时间:2018/3/5 上午10:48 * @param directExchange 直连交换器 * @param autoDeleteQueue1 自动删除队列 * @apiNote 绑定使用路由键为 black 的 autoDeleteQueue1 队列到直连交换器上 * @return Binding */ @Bean public Binding binding1a(DirectExchange directExchange, Queue autoDeleteQueue1) { return BindingBuilder.bind(autoDeleteQueue1).to(directExchange).with; } /** * 创建人:张博 * 时间:2018/3/5 上午10:48 * @param directExchange 直连交换器 * @param autoDeleteQueue1 自动删除队列 * @apiNote 绑定使用路由键为 green 的 autoDeleteQueue1 队列到直连交换器上 * @return Binding */ @Bean public Binding binding1b(DirectExchange directExchange, Queue autoDeleteQueue1) { return BindingBuilder.bind(autoDeleteQueue1).to(directExchange).with; }}
  • Receiver.java
package com.zb.rabbitMQtest.t4routing.receiver;import org.springframework.amqp.rabbit.annotation.RabbitListener;import org.springframework.stereotype.Component;/** * @author 张博 */@Component(value = "t4Receiver")public class Receiver { @RabbitListener(queues = "#{autoDeleteQueue0.name}") public void receiver0(String str) { System.out.println("receiver0++++++++++:" + str); } @RabbitListener(queues = "#{autoDeleteQueue1.name}") public void receiver1(String str) { System.out.println("receiver1++++++++++:" + str); }}
  • Send.java
package com.zb.rabbitMQtest.t4routing.send;import org.springframework.amqp.core.DirectExchange;import org.springframework.amqp.rabbit.core.RabbitTemplate;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;/** * @author 张博【zhangb@lianliantech.cn】 */@Component(value = "t4Send")public class Send { @Autowired private DirectExchange directExchange; @Autowired private RabbitTemplate rabbitTemplate; private String[] keys = {"orange", "black", "green"}; public void send() { String message = "哈哈哈"; for (int i = 0; i < 5; i++) { System.out.println("send++++++++++:".concat; rabbitTemplate.convertAndSend(directExchange.getName(), keys[2], message); } }}
  • SendTest.java
package com.zb.rabbitMQtest.t4routing.send;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringRunner;/** * @author 张博 */@RunWith(SpringRunner.class)@SpringBootTestpublic class SendTest { @Autowired private Send send; @Test public void send() throws Exception { send.send(); }}
  • 测量试验结果,假诺是keys[0]那正是说唯有receiver0,如果是keys[1]那正是说就是看似广播那样,有receive0receive1,如果是keys[2]那正是说独有receive1
当keys[0]时send++++++++++:哈哈哈send++++++++++:哈哈哈send++++++++++:哈哈哈send++++++++++:哈哈哈send++++++++++:哈哈哈receiver0++++++++++:哈哈哈receiver0++++++++++:哈哈哈receiver0++++++++++:哈哈哈receiver0++++++++++:哈哈哈receiver0++++++++++:哈哈哈当keys[1]时send++++++++++:哈哈哈send++++++++++:哈哈哈send++++++++++:哈哈哈send++++++++++:哈哈哈send++++++++++:哈哈哈receiver1++++++++++:哈哈哈receiver1++++++++++:哈哈哈receiver0++++++++++:哈哈哈receiver0++++++++++:哈哈哈receiver0++++++++++:哈哈哈receiver1++++++++++:哈哈哈receiver1++++++++++:哈哈哈receiver0++++++++++:哈哈哈receiver1++++++++++:哈哈哈receiver0++++++++++:哈哈哈当keys[2]时send++++++++++:哈哈哈send++++++++++:哈哈哈send++++++++++:哈哈哈send++++++++++:哈哈哈send++++++++++:哈哈哈receiver1++++++++++:哈哈哈receiver1++++++++++:哈哈哈receiver1++++++++++:哈哈哈receiver1++++++++++:哈哈哈receiver1++++++++++:哈哈哈

本文由威尼斯888发布于计算机网络 / 编程,转载请注明出处:队列对来自这个交换器中的信息感兴趣

关键词:

上一篇:HTTP/1.0在每次的TCP连接上只允许发送一次请求

下一篇:没有了