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 ...
随机推荐
- 关于SQL2008 “不允许保存更改。您所做的更改要求删除并重新创建以下表。您对无法重新创建的标进行了更改或者启用了‘阻止保存要求重新创建表的更改’” 解决方案
不允许保存更改.您所做的更改要求删除并重新创建以下表.您对无法重新创建的标进行了更改或者启用了“阻止保存要求重新创建表的更改” 解决方法: 打开SQL SERVER 2008 工具-->选项- ...
- 【背景建模】PBAS
Pixel-Based Adaptive Segmenter(PBAS)检测算法,是基于像素的无参数模型,该算法结合了SACON和VIBE两个算法的优势,并在这两个算法的基础上改进而来,SACON和V ...
- 优秀程序设计的Kiss原则(keep it simple,stupid)
优秀程序设计的Kiss原则(keep it simple,stupid) 良好的编程原则与良好的设计工程原则密切相关.本文总结的这些设计原则,帮助开发者更有效率的编写代码,并帮助成为一名优秀的程序员. ...
- Webform(分页、组合查询)
一.分页 1.写查询方法: public List<Student> Select(int PageCount, int PageNumber) {//PageCount为每页显示条数,P ...
- C#源码500份
C Sharp 短信发送平台源代码.rar http://1000eb.com/5c6vASP.NET+AJAX基础示例 视频教程 http://1000eb.com/89jcC# Winform ...
- Office2016体验
Microsoft又迎来了更新的季节.对于我来说,win10就算了,不太稳定,特别是遇到一些专业的程序,因为很多行业软件开发.测试环境都是winxp或win7等:VS2015也安上了,但还没用,一直用 ...
- mac java 环境设置
MAC下JDK1.6下载路径 http://support.apple.com/kb/DL1572 Mac OS的java版本问题和Eclipse中无法找到jdk源代码的问题解决办法 下载包含源代码j ...
- Android ListView用EditText实现搜索功能
前言 最近在开发一个IM项目的时候有一个需求就是,好友搜索功能.即在EditText中输入好友名字,ListView列表中动态展示刷选的好友列表.我把这个功能抽取出来了,先贴一下效果图: 分析 在查阅 ...
- 支持多选的Spinner控件
概述 当我们要做单选功能的时候,我们会很自然的想到Spinner,它可以在一个集合中选择一个我们需要的值.但是有时候我们需要在一个集合中选择多个值,这个时候Spinner就不能满足需求.此时可以根据自 ...
- 【读书笔记】iOS-Objective-C对C的扩展基础知识
一,Xcode的.m扩展名表示文件含有Objective-C代码,应由Objective-C编译器处理.C编译器处理名称以.c结尾的文件,而C++编译器处理.cpp文件.在Xcode中,所有这些编译工 ...