spring rabbitmq 配置文件簡單介紹

        rabbitmq  一個java 開源的消息中間件,能夠用來對應用之間的調用解耦,好比說,我要對登錄事件進行多種操做(記錄日誌、更新某些信息)。這些應用依賴登錄事件,但登錄自己並不對這些應用有依賴,能夠經過消息中間件的方式進行解耦。java

        由對登錄事件感興趣的應用系統訂閱消息,對消息處理,完成業務需求,同時對各系統解耦。spring

        rabbitmq 的介紹以及教程網上有,須要的能夠百度,這裏僅上兩端帶註釋的代碼json

//生產者app

//建立鏈接工廠
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("192.168.22.111");
factory.setUsername("guest");
factory.setPassword("guest");
//建立鏈接
Connection connection = factory.newConnection();
//建立channel 全部的消息操做基於channel
Channel channel = connection.createChannel(10);
//聲明一個exchange topic 類型
channel.exchangeDeclare("crm.topic", "topic",true,false,false,null);
//聲明一個隊列
channel.queueDeclare("app.login.user", true, false, false, null);
//將queue 與exchange 綁定
channel.queueBind("app.login.user", "crm.topic", "app.login.user");
//發送消息,指定與exchange & routingKey 
channel.basicPublish("crm.topic", "app.login.user", null, "sxxxxxxxxxx".getBytes());
 
channel.close();
connection.close();異步

消費者線程

//建立鏈接工廠
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("192.168.22.111");
factory.setUsername("guest");
factory.setPassword("guest");
//建立鏈接
Connection connection = factory.newConnection();
Channel channel = connection.createChannel(10);日誌

//聲明一個隊列
channel.queueDeclare("crmcommon.login.user", true, false, false, null);
//將queue 與exchange 綁定
channel.queueBind("crmcommon.login.user", "crm.topic", "crmcommon.login.user");
//消費
GetResponse r = channel.basicGet("crmcommon.login.user", true);
System.out.println(new String(r.getBody()));
channel.close();
connection.close(); 中間件

以上是一個簡單的生產者,一個簡單的消費者。教程

下面是使用spring整合的配置rabbitmq

<!-- 登錄事件 -->
<!-- 鏈接工廠 bean -->
<rabbit:connection-factory id="connectionFactory" host="${amqp.rabbit.host}" 
 username="${amqp.rabbit.username}"
 password="${amqp.rabbit.password}" 
 />
 
 <!-- RabbitAdmin 用於管理exchange,queue -->
 <rabbit:admin id="rabbitAdmin" connection-factory="connectionFactory"/>
 
 <!-- 聲明一個隊列 -->
 <rabbit:queue name="crmcommon.login.user" id="loginQuene" ></rabbit:queue>
     
 <!-- 聲明一個exchange -->
 <rabbit:topic-exchange  id="crmTopic" name="crm.topic" auto-delete="false" durable="true" auto-declare="true">
     <rabbit:bindings>
        <rabbit:binding pattern="crmcommon.login.#" queue="crmcommon.login.user"  ></rabbit:binding>
     </rabbit:bindings>
 </rabbit:topic-exchange>

 <!-- 消息轉換器 pojo ==> json  提供了 JsonMessageConverter SimpleMessageConverter 
     Jackson2JsonMessageConverter SerializerMessageConverter 這幾種轉換器 -->
     
 <bean id="messageConverter" class="org.springframework.amqp.support.converter.JsonMessageConverter" />
 
 <!-- 操做的模板,和jdbc 同樣spring 提供了一個封裝的模板類 -->
 <rabbit:template id="rabbitTamplate" exchange="crm.topic" routing-key="crmcommon.login.user"
 connection-factory="connectionFactory"
 message-converter="messageConverter"></rabbit:template> 
 
  
 <!--異步執行線程池,對jdk 線程池的封裝,暴露部分參數 -->
 <bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
      <property name="corePoolSize" value="2"></property>
      <property name="maxPoolSize" value="5"></property>
 </bean> 
     
 
 <!-- 消費者 須要實現 ChannelAwareMessageListener 或 MessageListener -->
 <bean id="listener" class="com.xx.xx.xx.rabbit.LoginListener" />
 
 <!-- listener 容器 能夠綁定多個消費者,一個消費者能夠綁定多個queue  -->
 <rabbit:listener-container connection-factory="connectionFactory"  acknowledge="manual" message-converter="messageConverter"  task-executor="taskExecutor" >
 <rabbit:listener ref="listener" queues="loginQuene"/>
 </rabbit:listener-container>

能夠看到spring 配置也是要配置上面代碼的基本元素,spring 同時提供了一下封裝類,對消息的轉換,操做模板等。 

相關文章
相關標籤/搜索