RabbitMQ - 实例操作

简介: 以前在单项目中用过RabbitMQ,没有问题 不过这次在分布式项目中使用RabbitMQ中有点搞糊涂了,但是实际上是没有问题的,思路清晰就行 简单看一下实际操作的示例吧:  资源文件中需要配置基本的rabbitMQ的属性,如下: 1 #rabbitmq config 2 rabbitmq.

以前在单项目中用过RabbitMQ,没有问题

不过这次在分布式项目中使用RabbitMQ中有点搞糊涂了,但是实际上是没有问题的,思路清晰就行

简单看一下实际操作的示例吧: 

资源文件中需要配置基本的rabbitMQ的属性,如下:

1 #rabbitmq config
2 rabbitmq.host=192.168.1.188
3 rabbitmq.port=5672
4 rabbitmq.username=lee
5 rabbitmq.password=lee
6 rabbitmq.vhost=danger

然后要配置applicationContext-rabbitmq.xml,这个文件需要新建,当然你也可以在你的service.xml中编写,但是为了配置清晰嘛

内容如下:

 1     <!-- 定义RabbitMQ的连接工厂 -->
 2     <rabbit:connection-factory id="connectionFactory"
 3         host="${rabbitmq.host}" 
 4         port="${rabbitmq.port}" 
 5         username="${rabbitmq.username}" 
 6         password="${rabbitmq.password}"
 7         virtual-host="${rabbitmq.vhost}" />
 8         
 9     <!-- 定义消息管理员 -->
10     <rabbit:admin connection-factory="connectionFactory"/>
11     
12     <!-- 生产者需要以下 -->
13     <!-- 定义交换机 -->
14     <rabbit:topic-exchange name="rest-content-exchange" durable="true" auto-declare="true">
15         <!-- 如果是2个不同的系统进行通知,那就手动在管理后台进行绑定 -->
16         <rabbit:bindings>
17             <rabbit:binding queue="rest-sms-queue" pattern="rest.sms.#"/>
18             <rabbit:binding queue="rest-jpush-queue" pattern="rest.jpush.#"/>
19             <rabbit:binding queue="rest-sysmsg-queue" pattern="rest.sysmsg.#"/>
20         </rabbit:bindings>
21     </rabbit:topic-exchange>
22     
23     <!-- 定义rabbitTemplate -->
24     <rabbit:template id="rabbitTemplate" connection-factory="connectionFactory" exchange="rest-content-exchange"/>
25     
26     
27     <!-- 消费者需要以下 -->
28     <!-- 定义队列 -->
29     <rabbit:queue name="rest-sms-queue" durable="true" auto-declare="true"/>
30     <rabbit:queue name="rest-jpush-queue" durable="true" auto-declare="true"/>
31     <rabbit:queue name="rest-sysmsg-queue" durable="true" auto-declare="true"/>
32     
33     <!-- 消费者 -->
34     <bean id="smsHandler" class="com.dingli.components.mq.handler.SmsHandler"></bean>
35     <bean id="jpushHandler" class="com.dingli.components.mq.handler.JpushHandler"></bean>
36     <bean id="saveSysMsgHandler" class="com.dingli.components.mq.handler.SaveSysMsgHandler"></bean>
37     
38     <!-- 队列监听 -->
39     <!-- TODO 注释了后台不会滚动显示 -->
40     <rabbit:listener-container connection-factory="connectionFactory" acknowledge="none" >
41         <rabbit:listener ref="smsHandler" method="excute" queue-names="rest-sms-queue" />
42         <rabbit:listener ref="jpushHandler" method="excute" queue-names="rest-jpush-queue" />
43         <rabbit:listener ref="saveSysMsgHandler" method="saveMsgExcute" queue-names="rest-sysmsg-queue" />
44     </rabbit:listener-container>

这里需要注意acknowledge,这个属性默认是auto,如果消费者报错了,会一直报错,因为他是轮询监听的,可以修改为none或者manul

再看看实现的消费者以及助手类,助手类可以理解为service

监听3个routing-key

 1 @Component
 2 public class SendMsgRestProducerImpl implements SendMsgRestProducer {
 3 
 4     @Autowired    
 5     private RabbitTemplate rabbitTemplate;
 6     
 7     @Override
 8     public void sendSMS(String mqSMSMessageJson) {
 9         rabbitTemplate.convertAndSend("rest.sms.send", mqSMSMessageJson);
10     }
11 
12     @Override
13     public void jpushContent(String mqJPushMessageJson) {
14         rabbitTemplate.convertAndSend("rest.jpush.send", mqJPushMessageJson);
15     }
16 
17     @Override
18     public void saveContent(String mqSysMessageJson) {
19         rabbitTemplate.convertAndSend("rest.sysmsg.send", mqSysMessageJson);
20     }
21     
22 }

这样,直接调用componentImpl就行了!并且这3个都是异步的

为什么要使用RabbitMQ,那就是效率问题,有些主流程实现后,附流程你不在乎,成功不成功不影响,顶多重发一次,这样的业务可以使用消息队列

当然也有更多更复杂的也需要用的,这里的业务场景就比较简单了,好吧,看官们亲拍~

 

相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
28天前
|
物联网
MQTT常见问题之用单片机接入阿里MQTT实例失败如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:
|
10月前
|
消息中间件 存储 缓存
RocketMQ工作原理详解及开发实例
RocketMQ工作原理详解及开发实例
506 0
|
8月前
|
安全 网络协议 物联网
不看后悔系列之一篇搞懂LinuxCentOS搭建MQTT服务器及客户端操作使用
linux CentOS上搭建MQTT服务器并不难,主要就是用到了mosquitto这款消息代理服务软件。其采用发布/订阅模式传输机制,轻量、简单、开放并易于实现,被广泛应用于物联网之中。
1409 0
|
3月前
|
消息中间件 Java Spring
RabbitMQ各种模式的含义与Spring Boot实例详解
RabbitMQ各种模式的含义与Spring Boot实例详解
36 0
|
3月前
|
消息中间件 API RocketMQ
RocketMQ-初体验RocketMQ(07)-使用API操作RocketMQ_顺序消息 ordermessage
RocketMQ-初体验RocketMQ(07)-使用API操作RocketMQ_顺序消息 ordermessage
30 0
|
3月前
|
消息中间件 存储 Java
RocketMQ-初体验RocketMQ(06)-使用API操作RocketMQ ,理解RocketMQ的存储结构
RocketMQ-初体验RocketMQ(06)-使用API操作RocketMQ ,理解RocketMQ的存储结构
175 0
|
4月前
|
消息中间件 网络协议 Java
RabbitMQ消息队列基础详解与安装实例
RabbitMQ消息队列基础详解与安装实例
126 0
|
9月前
|
消息中间件 网络安全 RocketMQ
寻找RocketMQ首席评测官 :创建专有网络VPC操作指引
在领取RocketMQ免费试用时,会有创建VPC的过程。本文说明如何创建专有网络VPC。
1732 3
|
4月前
|
消息中间件 安全 Docker
Docker中部署RabbitMQ并使用Python3.x操作全书(Python操作RabbitMQ看这一篇就够了)
Docker中部署RabbitMQ并使用Python3.x操作全书(Python操作RabbitMQ看这一篇就够了)
54 0
|
5月前
|
消息中间件 API 数据安全/隐私保护
使用 REST API 操作 RabbitMQ(二)
使用 REST API 操作 RabbitMQ