消息队列RabbitMQ与春天整合使用的实例代码

  

<强>一、什么是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”/祝辞

消息队列RabbitMQ与春天整合使用的实例代码