RabbitMQ之Topic交换器模式下开发

Topic交换器,即主题模式,进行规则匹配。

一、Provider

配置文件

1 spring.application.name=provider
2 spring.rabbitmq.host=192.168.50.30
3 spring.rabbitmq.port=5672
4 spring.rabbitmq.username=rabbit
5 spring.rabbitmq.password=rabbit
6 #设置交换器名称
7 mq.config.exchange=log.topic

代码

 1 public class UserSender {
 2     @Autowired
 3     private AmqpTemplate amqpTemplate;
 4
 5     @Value("${mq.config.exchange}")
 6     private String exchange;
 7
 8     public void send(String msg) {
 9         //交换器、路由键、消息
10         this.amqpTemplate.convertAndSend(this.exchange, "user.log.debug", msg);
11         this.amqpTemplate.convertAndSend(this.exchange, "user.log.info", msg);
12     }
13
14     public void send2(String msg) {
15         this.amqpTemplate.convertAndSend(this.exchange, "product.log.debug", msg);
16         this.amqpTemplate.convertAndSend(this.exchange, "product.log.info", msg);
17     }
18 }

二、Condumer

配置文件

 1 spring.appliction.name=consumer
 2 spring.rabbitmq.host=192.168.50.30
 3 spring.rabbitmq.port=5672
 4 spring.rabbitmq.username=rabbit
 5 spring.rabbitmq.password=rabbit
 6 #设置交换器名称
 7 mq.config.exchange=log.topic
 8 #info 队列名称
 9 mq.config.queue.info=log.info
10 #error 队列名称
11 mq.config.queue.error=log.error
12 #log 队列名称
13 mq.config.queue.logs=log.all

infoReceiver

 1 /**
 2     @RabbitListener bindings:绑定队列
 3     @QueueBinding value:绑定队列的名称
 4             exchange:配置交换器
 5     @Queue value:配置队列名称
 6             autoDelete:是否是一个可删除的临时队列
 7     @Exchange value:为交换器起个名称
 8             type:指定具体的交换器类型
 9 */
10 @Component
11 @RabbitListener(
12     bindings=@QueueBinding(
13         value=@Queue(
14             value="${mq.config.queue.info}",
15             autoDelete="true"
16         ),
17         exchange=@Exchange(
18             value="${mq.config.exchange}",
19             type=ExchangeTypes.TOPIC
20         ),
21         key="*.log.info"
22     )
23 )
24 public class InfoReceiver {
25     @RabbitHandler
26     public void process(String msg){
27         System.out.println(msg);
28     }
29 }

logsReceiver

 1 /**
 2     @RabbitListener bindings:绑定队列
 3     @QueueBinding value:绑定队列的名称
 4             exchange:配置交换器
 5     @Queue value:配置队列名称
 6             autoDelete:是否是一个可删除的临时队列
 7     @Exchange value:为交换器起个名称
 8             type:指定具体的交换器类型
 9 */
10 @Component
11 @RabbitListener(
12     bindings=@QueueBinding(
13         value=@Queue(
14             value="${mq.config.queue.logs}",
15             autoDelete="true"
16         ),
17         exchange=@Exchange(
18             value="${mq.config.exchange}",
19             type=ExchangeTypes.TOPIC
20         ),
21         key="*.log.*"
22     )
23 )
24 public class LogsReceiver {
25     @RabbitHandler
26     public void process(String msg){
27         System.out.println(msg);
28     }
29 }

原文地址:https://www.cnblogs.com/guanghe/p/11026947.html

时间: 2024-08-29 04:31:53

RabbitMQ之Topic交换器模式下开发的相关文章

转:Windows8内核模式下开发NDIS应用-NDIS Filter讲解

http://blog.csdn.net/itcastcpp/article/details/7752075 在Win8系统下开发驱动程序,需要数字证书,还需要驱动签名认证.不能像XP下面那样疯狂滴耍流氓了. 由于Win8系统的内核做了大幅度的修改,它和XP系统的内核起了很大的变化,最显著的就是刚才说的:需要签名和证书.  还有就是:不能随意的HOOK SSDT了. 在开发NDIS驱动程序的时候,WDK开发包提供了一个新的框架,叫着NDIS FilterNDIS Filter是一个例子工程.假入

RabbitMQ之Fanout交换器模式开发

Fanout模式,即广播模式,一个发送到交换机的消息会被转发到与该交换机绑定的所有队列上. 一.Provider 配置文件 1 spring.application.name=provider 2 spring.rabbitmq.host=192.168.50.30 3 spring.rabbitmq.port=5672 4 spring.rabbitmq.username=rabbit 5 spring.rabbitmq.password=rabbit 6 #设置交换器的名称 7 mq.con

RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较

RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储 RabbitMQ提供了四种Exchange:fanout,direct,topic,header header模式在实际使用中较少,本文只对前三种模式进行比较. 性能排序:fanout > direct >> topic.比例大约为11:10:6 一.Direct Exchange 任何发送到Direct Exchange的消息都会被转发到RouteKey中指定

RabbitMQ三种Exchange模式(fanout,direct,topic)的特性 -摘自网络

RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储 RabbitMQ提供了四种Exchange:fanout,direct,topic,header header模式在实际使用中较少,本文只对前三种模式进行比较. 性能排序:fanout > direct >> topic.比例大约为11:10:6 一.Direct Exchange 任何发送到Direct Exchange的消息都会被转发到RouteKey中指定

简介Intel MIC上的分布式开发以及Offload模式下的各种限制

最近要在MIC机群上做分布式开发,发现有两种模式可以用: 1) offload模式:该模式和GPGPU编程思想类似,把并行度高的代码转移到local的MIC处理器上执行,其它代码仍然在CPU上执行.MIC只负责本地计算,分布式通信必须在CPU上执行. 2)symmetric模式:编译出在MIC和CPU上执行的两份二进制代码.该模式逻辑上允许MIC进行分布式通信,虽然物理上消息还是从CPU走的.这种模式编程最大的难点是load balancing问题. 通过几天探索,发现了offload模式下的各

混合开发模式下主流移动开发平台分析

关键字:AppCan 移动开发平台 移动应用 Hybrid App在过去的两年中已经成为移动界的核心话题,但是作为一名Web开发者来说要如何站在移动互联网的浪潮之巅呢?是选择学习原生开发,研究Java.Object-C.C#等语言,还是选择继续使用网页开发,容忍HTML5功能的局限性?就在开发者左右为难的情况下Hybrid App作为一个折中的解决方案诞生了.那么究竟什么才是Hybrid App呢?HybridApp概念Hybrid App:Hybrid App is a mobile appl

大钟的ios开发之旅(2)————简单说说ios中ARC与非ARC模式下的property的变量修饰词

/******************************************************************************************** * author:[email protected]大钟 * E-mail:[email protected] *site:http://www.idealpwr.com/ *深圳市动力思维科技发展有限公司 * http://blog.csdn.net/conowen * 注:本文为原创,仅作为学习交流使用,转

MVC开发模式下的用户角色权限控制

前提: MVC开发模式 大概思想: 1.在MVC开发模式下,每个功能都对应着不同的控制器或操作方法名(如修改密码功能可能对应着User/changepd),把每个功能对应的控制器名和操作方法名存到数据库中,分别分配一个Id,这样,每个功能就都对应着一个Id. 2.在用户表中,每个用户都有一个用户角色(类似用户组)id 3.在角色表中,每个角色id都存放着他们自身角色所拥有的功能id的集合 然后在判断权限时,通过用户的角色Id获取相关功能id集合,然后判断当前访问的功能id是否在集合中,大致如此.

RabbitMQ学习笔记3-使用topic交换器

本例使用topic接收警告.错误的日志,并根据匹配的路由规则发送给不同的Queue队列来处理的例子: 日志生产者SenderWithTopicExchange 1 package com.yzl.test2; 2 3 import java.util.concurrent.CountDownLatch; 4 import java.util.concurrent.ExecutorService; 5 import java.util.concurrent.Executors; 6 7 impor