以前在单项目中用过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 - 实例操作的更多相关文章

  1. [转]使用Xcode 4发布App 实例操作

    使用xcode 4发布app 实例操作是本文介绍的内容,不多说,我们直接进入话题. 1.iOS Provisioning Portal 和iTunes Connect 没有变,下载与安装.mobile ...

  2. Flashback Drop实例操作

    1.Flashback DropFlashback Drop 是从Oracle 10g 开始出现的,用于恢复用户误删除的对象(包括表,索引等), 这个技术依赖于Tablespace Recycle B ...

  3. PHP使用RabbitMQ实例

    相关博文:CentOS6.9安装RabbitMQ和源码编译安装php的RabbitMQ扩展RabbitMQ入门基础CentOS7源码编译安装nginx+php7.2+mysql5.7并使用system ...

  4. 058——VUE中vue-router之实例操作新闻列表单页面应用与路由别名的使用

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. 040——VUE中组件之组件间的数据参props的使用实例操作

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. 034——VUE中表单控件处理之使用vue控制radio表单的实例操作

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. php5.4以上 mysqli 实例操作mysql 增,删,改,查

    <?php //php5.4以上 mysqli 实例操作mysql header("Content-type:text/html;charset=utf8"); $conn ...

  8. [Sqlite]--&gt;嵌入式数据库事务理解以及实例操作

    引子: 1. Sqlite在Windows.Linux 和 Mac OS X 上的安装过程 2,嵌入式数据库的安装.建库.建表.更新表结构以及数据导入导出等等具体过程记录 SQLite 事务(Tran ...

  9. 每天一个JavaScript实例-操作元素定位元素

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

随机推荐

  1. ahjesus Unity3D界面快捷键

    F Frame selection Tab Shift focus between first column and second column (Two columns) Ctrl/Cmd + F ...

  2. 硅谷新闻4--解决页签手指按下从左到右滑动的bug

    有一种方法可以阻止父层的View截获touch事件,就是调用 getParent().requestDisallowInterceptTouchEvent(true);方法.一旦底层View收到tou ...

  3. 【GOF23设计模式】策略模式

    来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_策略模式.CRM中报价策略.GUI编程中布局管理器底层架构 package com.test.strategy; /** ...

  4. [程序人生]前途无"亮‘’的大学

    转眼之间就到大四了,今天晚上很迷茫,很纠结,想了好多,好多,真的,长大之后,自从第一次失恋之后,第一次会想到这么的多.     嗯,先自我介绍哈吧,我是从云南的大山里走出来的孩子,什么样的大山,就是到 ...

  5. 个人总结 HTML+CSS

    从大一下学期接触,一直到今年,接触的时间也挺长的了,最近一些认识的盆友和同学说是想学习前端,自己也开始慢慢停下脚步,不再拼命地去学很多框架的东西,回归到基础,慢慢把基础打牢 很多知识碎片一直来不及整理 ...

  6. Android接口回调机制

    开发中,接口回调是我们经常用到的. 接口回调的意思即,注册之后并不立马执行,而在某个时机触发执行. 举个例子: A有一个问题不会,他去问B,B暂时解决不出来,B说,等我(B)解决了再告诉你(A)此时A ...

  7. cocospods的安装与应用

    安装cocospods 一,升级Ruby环境 ~ xxx$ sudo gem update --system   二,安装Cocoapods时需要访问cocoapods.org,该网站可能被墙掉,但是 ...

  8. 关于 xib 的使用

    前两天写百度地图的时候要添加 一个标注的泡泡view  但有些复杂所以想用xib 拖拽出一个View ,拖拽出来之后发现添加不到Controller中 ,郁闷!! 终于找到了方法: //先获取NIb ...

  9. Swift学习--微博的基础框架搭建

    学习如何使用Swift写项目 一.搭建微博项目的主框架 1.1--搭建功能模块 1.2--在 AppDelegate 中的 didFinishLaunchingWithOptions 函数,设置启动控 ...

  10. node.js之excel文件读取

    金天:学习一个新东西,就要持有拥抱的心态,如果固守在自己先前的概念体系,就会有举步维艰的感觉.node.js解析excel, 读取记录. 业务需求,从excel (xlsx, xls)导入数据. 备选 ...