<强>一、什么是RabbitMQ 强>
RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性,扩展性,高可用性等方面表现不俗。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。
RabbitMQ是由Erlang语言开发,安装RabbitMQ服务需要先安装Erlang语言包。
<强>二,如何与春天集成强>
<强> 1。我们都需要哪些Jar包吗? 强>
抛开单独使用春天的包不说,引入RabbitMQ我们还需要两个:
& lt; !——RabbitMQ祝辞 & lt; dependency> & lt; groupId> com.rabbitmq & lt; artifactId> amqp-client & lt; version> 3.5.1 & lt;/dependency> & lt; dependency> & lt; groupId> org.springframework.amqp & lt; artifactId> spring-rabbit & lt; version> 1.4.5.RELEASE & lt;/dependency> >之前<强> 2。使用外部参数文件application.properties: 强>
mq.host=127.0.0.1 mq.username=队列 mq.password=1234 mq.port=8001 #统一XML配置中易变部分的命名 mq.queue=test_mq易变指的是在实际项目中,如果测试与生产环境使用的同一个RabbitMQ服务器。那我们在部署时直接修改属性文件的参数即可,防止测试与生产环境混淆。
,修改applicationContext。xml文件,引入我们创建的属性文件
& lt;上下文:property-placeholder位置="类路径:application.properties”/比; & lt; util:属性id=癮ppConfig”位置=袄嗦肪?application.properties”祝辞& lt;/util: properties><强> 3。连接RabbitMQ服务器强>
& lt; !——连接配置——比; & lt;兔子:连接工厂id=" connectionFactory "=" $ {mq。主机}"用户名=" $ {mq.username}” 密码=" $ {mq。密码}“端口=" $ {mq。港口}"/比; & lt;兔子:管理连接工厂=" connectionFactory "/祝辞<强> 4。声明一个RabbitMQ模板强>
代码如下:
& lt;兔子:模板id=" amqpTemplate "=" $ {mq交换。队列}_exchange connectionFactory“连接工厂=,/在
<强> 5。在applicationContext。xml中声明一个交换机,名字属性需配置到RabbitMQ服务器。强>
& lt;兔子:topic-exchange name=" $ {mq。队列}_exchange“持久=" true " auto-delete=" false "比; & lt;兔子:bindings> & lt;兔子:绑定队列=皌est_queue”模式=" $ {mq.queue} _patt "/比; & lt;/兔子:bindings> & lt;/兔子:topic-exchange>交换机的四种模式:
-
<李>直接:转发消息到routigKey指定的队列。李>
<李>主题:按规则转发消息(最灵活)。李>
<李>标题:(这个还没有接触到)李>
<李>扇出:转发消息到所有绑定队列李>
交换器的属性:
-
<李>持久性:如果启用,交换器将会在服务器重启前都有效。李>
<李>自动删除:如果启用,那么交换器将会在其绑定的队列都被删除掉之后自动删除掉自身。李>
<李>惰性:如果没有声明交换器,那么在执行到使用的时候会导致异常,并不会主动声明。李>
如果没有队列绑定在交换机上,则发送到该交换机上的消息会丢失。
一个交换机可以绑定多个队列,一个队列可以被多个交换机绑定。
主题类型交换器通过模式匹配分析消息的routing-key属性。它将routing-key和binding-key的字符串切分成单词。这些单词之间用点隔开。它同样也会识别两个通配符:#匹配0个或者多个单词,*匹配一个单例词。如,绑定的关键:* .stock。#匹配路由关键:美元。stcok和eur.stock。db,但是不匹配stock.nana。
因为交换器是命名实体,声明一个已经存在的交换器,但是试图赋予不同类型是会导致错误。客户端需要删除这个已经存在的交换器,然后重新声明并且赋予新的类型。
<强> 6。在applicationContext。xml中声明一个队列、名称属性是需要配置到RabbitMQ服务器的。强>
代码如下:
& lt;兔子:队列id=" test_queue " name=" $ {mq。队列}_testQueue“持久=" true " auto-delete=" false "独家=" false”/祝辞