RabbitMQ - 实例操作
以前在单项目中用过RabbitMQ,没有问题
不过这次在分布式项目中使用RabbitMQ中有点搞糊涂了,但是实际上是没有问题的,思路清晰就行
简单看一下实际操作的示例吧:

资源文件中需要配置基本的rabbitMQ的属性,如下:
#rabbitmq config
rabbitmq.host=192.168.1.188
rabbitmq.port=5672
rabbitmq.username=lee
rabbitmq.password=lee
rabbitmq.vhost=danger
然后要配置applicationContext-rabbitmq.xml,这个文件需要新建,当然你也可以在你的service.xml中编写,但是为了配置清晰嘛

内容如下:
<!-- 定义RabbitMQ的连接工厂 -->
<rabbit:connection-factory id="connectionFactory"
host="${rabbitmq.host}"
port="${rabbitmq.port}"
username="${rabbitmq.username}"
password="${rabbitmq.password}"
virtual-host="${rabbitmq.vhost}" /> <!-- 定义消息管理员 -->
<rabbit:admin connection-factory="connectionFactory"/> <!-- 生产者需要以下 -->
<!-- 定义交换机 -->
<rabbit:topic-exchange name="rest-content-exchange" durable="true" auto-declare="true">
<!-- 如果是2个不同的系统进行通知,那就手动在管理后台进行绑定 -->
<rabbit:bindings>
<rabbit:binding queue="rest-sms-queue" pattern="rest.sms.#"/>
<rabbit:binding queue="rest-jpush-queue" pattern="rest.jpush.#"/>
<rabbit:binding queue="rest-sysmsg-queue" pattern="rest.sysmsg.#"/>
</rabbit:bindings>
</rabbit:topic-exchange> <!-- 定义rabbitTemplate -->
<rabbit:template id="rabbitTemplate" connection-factory="connectionFactory" exchange="rest-content-exchange"/> <!-- 消费者需要以下 -->
<!-- 定义队列 -->
<rabbit:queue name="rest-sms-queue" durable="true" auto-declare="true"/>
<rabbit:queue name="rest-jpush-queue" durable="true" auto-declare="true"/>
<rabbit:queue name="rest-sysmsg-queue" durable="true" auto-declare="true"/> <!-- 消费者 -->
<bean id="smsHandler" class="com.dingli.components.mq.handler.SmsHandler"></bean>
<bean id="jpushHandler" class="com.dingli.components.mq.handler.JpushHandler"></bean>
<bean id="saveSysMsgHandler" class="com.dingli.components.mq.handler.SaveSysMsgHandler"></bean> <!-- 队列监听 -->
<!-- TODO 注释了后台不会滚动显示 -->
<rabbit:listener-container connection-factory="connectionFactory" acknowledge="none" >
<rabbit:listener ref="smsHandler" method="excute" queue-names="rest-sms-queue" />
<rabbit:listener ref="jpushHandler" method="excute" queue-names="rest-jpush-queue" />
<rabbit:listener ref="saveSysMsgHandler" method="saveMsgExcute" queue-names="rest-sysmsg-queue" />
</rabbit:listener-container>
这里需要注意acknowledge,这个属性默认是auto,如果消费者报错了,会一直报错,因为他是轮询监听的,可以修改为none或者manul
再看看实现的消费者以及助手类,助手类可以理解为service

监听3个routing-key
@Component
public class SendMsgRestProducerImpl implements SendMsgRestProducer { @Autowired
private RabbitTemplate rabbitTemplate; @Override
public void sendSMS(String mqSMSMessageJson) {
rabbitTemplate.convertAndSend("rest.sms.send", mqSMSMessageJson);
} @Override
public void jpushContent(String mqJPushMessageJson) {
rabbitTemplate.convertAndSend("rest.jpush.send", mqJPushMessageJson);
} @Override
public void saveContent(String mqSysMessageJson) {
rabbitTemplate.convertAndSend("rest.sysmsg.send", mqSysMessageJson);
} }
这样,直接调用componentImpl就行了!并且这3个都是异步的
为什么要使用RabbitMQ,那就是效率问题,有些主流程实现后,附流程你不在乎,成功不成功不影响,顶多重发一次,这样的业务可以使用消息队列
当然也有更多更复杂的也需要用的,这里的业务场景就比较简单了,好吧,看官们亲拍~
RabbitMQ - 实例操作的更多相关文章
- [转]使用Xcode 4发布App 实例操作
使用xcode 4发布app 实例操作是本文介绍的内容,不多说,我们直接进入话题. 1.iOS Provisioning Portal 和iTunes Connect 没有变,下载与安装.mobile ...
- Flashback Drop实例操作
1.Flashback DropFlashback Drop 是从Oracle 10g 开始出现的,用于恢复用户误删除的对象(包括表,索引等), 这个技术依赖于Tablespace Recycle B ...
- PHP使用RabbitMQ实例
相关博文:CentOS6.9安装RabbitMQ和源码编译安装php的RabbitMQ扩展RabbitMQ入门基础CentOS7源码编译安装nginx+php7.2+mysql5.7并使用system ...
- 058——VUE中vue-router之实例操作新闻列表单页面应用与路由别名的使用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 040——VUE中组件之组件间的数据参props的使用实例操作
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 034——VUE中表单控件处理之使用vue控制radio表单的实例操作
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- php5.4以上 mysqli 实例操作mysql 增,删,改,查
<?php //php5.4以上 mysqli 实例操作mysql header("Content-type:text/html;charset=utf8"); $conn ...
- [Sqlite]-->嵌入式数据库事务理解以及实例操作
引子: 1. Sqlite在Windows.Linux 和 Mac OS X 上的安装过程 2,嵌入式数据库的安装.建库.建表.更新表结构以及数据导入导出等等具体过程记录 SQLite 事务(Tran ...
- 每天一个JavaScript实例-操作元素定位元素
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
随机推荐
- 中国快递包裹总量的预测-基于SARIMA模型
code{white-space: pre;} pre:not([class]) { background-color: white; }if (window.hljs && docu ...
- spring boot学习笔记
spring boot 是什么 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程. spring boot采用了“约定优于配置” ...
- Android笔记——Android中数据的存储方式(二)
我们在实际开发中,有的时候需要储存或者备份比较复杂的数据.这些数据的特点是,内容多.结构大,比如短信备份等.我们知道SharedPreferences和Files(文本文件)储存这种数据会非常的没有效 ...
- Webform(内置对象-Response与Redirect、QueryString传值、Repeater删改)
一.内置对象(一)Response - 响应请求对象1.定义:Response对象用于动态响应客户端请示,控制发送给用户的信息,并将动态生成响应.Response对象只提供了一个数据集合cookie, ...
- ElasticSearch文档-简单介绍
ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎.设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便.支持通过HTTP使用JSON进行数据索引 ...
- ASP.NET MVC自定义AuthorizeAttribute篇知识点讲解—登录限制
1.前言 a.微软对ASP.NET的开发从WebForm到MVC的转变,已经正式过去5,6个年头,现在WebForm和MVC也都越来越完善,小小算来我也已经工作了将近三年,从大学的时候学习ASP.NE ...
- JavaScript基础10——node对象
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- sharepoint 中waiting screen dialog的使用方法(JSOM)
sharepoint中有一个种wait screen的弹出框,其实就是一直转圈,告诉你等待一会儿时间.用法如下: 弹出: var watiDialog = SP.UI.ModalDialog.show ...
- Android——五大布局
Android的五大布局分为: 线性布局 相对布局 帧布局 绝对布局 表格布局 一.线性布局 线性布局在开发中使用最多,具有垂直方向与水平方向的布局方式 通过设置属性"android:ori ...
- JSP内置对象--request对象
本文主要介绍JSP中的request对象 request对象的主要方法: setAttribute(String name,Object):设置名字为name的request的参数值 getAttri ...