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 ...
随机推荐
- CentOS修改服务器系统时间
linux安装完毕后,一般都是国外的世界,一点都不方便设置任务,或者导致网站获取本地的时间错乱,所以就需要把服务器的时间改为和本地时间一致,也就是换成中国的时间. 第一条指令:date –s '201 ...
- PHP学习笔记:使用session来存储用户的登录信息
session可以用来存储多种类型的数据,因此具有很多的用途,常用来存储用户的登录信息,购物车数据,或者一些临时使用的暂存数据等. 用户在登录成功以后,通常可以将用户的信息存储在session中,一般 ...
- C# 分层 三层架构
Hello! 三层架构↓↓↓↓↓↓ 三层架构分为:表现层(UI(User Interface)).业务逻辑层(BLL(Business Logic Layer)).数据访问层(DAL(Data Acc ...
- VS2010在空解决方案中添加项目
如题,在空解决方案中添加第一个项目的时候会看不到那个solution解决方案文件,而是你当前添加的项目,当你再添加其他项目的时候就悲催了,找不到这个solution,只能在这个项目文件上新加文件,很郁 ...
- js事件小记
参考javascript编程全解 javascript高级程序设计 javascript经典实例 对事件的处理方式称为事件处理程序或事件侦听器 ,对于一个元素或事件,只能设定1个事件处理程序,却可以 ...
- javascript小知识点
大家对input中的value值研究的透彻么,今天看到一篇博客,很神奇 然后研究了一下input中的value值到底对应的是啥值 1.input中的value,这是大家在开发中进场遇到的一个问题 & ...
- 3种 web 会话管理的方式
转自:http://www.yidianzixun.com/n/0F1GYAsQ?s=8&appid=xiaomi&ver=3.7.8&utk=4lxc4q7c&fro ...
- 解决SharePoint文档库文件在搜索结果页面显示的标题和文档的标题不一致问题(search result)
问题表现: SharePoint 2013 爬网后,搜索一个文档,虽然搜到了,但是显示有点问题,如图: 原因分析: 造成该问题的原因是,该文档除了本身有一个名称外,在文档metadata的title属 ...
- 微信支付redirect_uri参数错误
在做微信支付的时候,点击提交,出现“redirect_uri参数错误”.经过查找,需要在后台正确设置授权域名.大致步骤如下:1.首先登录微信公众号管理后台2.点击开发者中心3.找到 网页账号—> ...
- Xcode证书路径和缓存清理路径
1.Xcode证书路径: ~/Library/MobileDevice/Provisioning Profiles 2.Jenkines共享证书路径: /用户/共享/Jenkins/Library/M ...