rabbitmq 连接服务配置实例

 

发送消息代码

EXCHANGE_NAME为通道

ROUTINGKEY_NAME+ objs.getString("templateName")为动态队列

Obj为消息内容

@Resource
    private RabbitTemplate rabbitTemplate;

    rabbitTemplate.convertAndSend(EXCHANGE_NAME, ROUTINGKEY_NAME
                        + objs.getString("templateName"), objs);

 

接收消息代码

package com.iqb.eatep.house.rabbit.mq.data.mq;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.core.ChannelAwareMessageListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.iqb.eatep.house.rabbit.mq.data.service.IMessageService;
import com.rabbitmq.client.Channel;
@Component
public class MessageQueueListener implements ChannelAwareMessageListener{

    public static Logger logger = LoggerFactory.getLogger(MailQueueListener.class);
    
    @Autowired
    private IMessageService messageServiceImpl;
    
    @Override
    public void onMessage(Message message, Channel channel) throws Exception {
        String messageTemplateKey = message.getMessageProperties().getReceivedRoutingKey();
        String messageNameKey = messageTemplateKey.substring(messageTemplateKey.indexOf(".")+1, messageTemplateKey.length());
        String messageContents = new String(message.getBody(),"UTF-8");
        try{
            messageServiceImpl.callbackMessage(channel,messageNameKey, messageContents);
        }catch(Exception e){
            logger.error("消息发送失败:" + e.getMessage());
        }
    }

}
 

 

spring-mq.xml

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:rabbit="http://www.springframework.org/schema/rabbit" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/rabbit
    http://www.springframework.org/schema/rabbit/spring-rabbit-1.0.xsd" >

    <description>rabbitmq 连接服务配置</description>
    <!-- 连接配置 -->
    <rabbit:connection-factory id="connectionFactory" host="${mq.host}" username="${mq.username}" password="${mq.password}" port="${mq.port}"  virtual-host="${mq.vhost}" connection-factory="refConnectionFactory"/>
    <rabbit:admin connection-factory="connectionFactory"/>
    <bean id="refConnectionFactory" class="com.rabbitmq.client.ConnectionFactory">
         <property name="requestedHeartbeat" value="10000"></property>
         <property name="connectionTimeout" value="10000"></property>
    </bean>
    <!-- spring template声明-->
    <rabbit:template exchange="amqpExchange" id="amqpTemplate" reply-timeout="10000" connection-factory="connectionFactory"  message-converter="jsonMessageConverter" />
    <!-- queue 队列声明-->
    <rabbit:queue id="kehujia_inquiry" durable="true" auto-delete="false" exclusive="false" name="kehujia_inquiry"/>
    <rabbit:queue id="kehujia_mail" durable="true" auto-delete="true" exclusive="false" name="kehujia_mail"/>
    <rabbit:queue id="kehujia_message" durable="true" auto-delete="true" exclusive="false" name="kehujia_message"/>
    <rabbit:queue id="kehujia_sms" durable="true" auto-delete="true" exclusive="false" name="kehujia_sms"/>
    <rabbit:queue id="kehujia_message_center" durable="true" auto-delete="true" exclusive="false" name="kehujia_message_center"/>
    <rabbit:queue id="kehujia_delay" durable="true" auto-delete="true" exclusive="false" name="kehujia_delay">
        <rabbit:queue-arguments>
            <entry key="x-dead-letter-exchange" value="kehujia-delay-exchange"/>
            <entry key="x-dead-letter-routing-key" value="kehujia_delay_consumer"/>
        </rabbit:queue-arguments>
    </rabbit:queue>
    <rabbit:queue id="kehujia_delay_consumer" durable="true" auto-delete="true" exclusive="false" name="kehujia_delay_consumer"></rabbit:queue>
    <!-- 消息对象json转换类 -->
    <bean id="jsonMessageConverter" class="org.springframework.amqp.support.converter.Jackson2JsonMessageConverter" />  
    
     <!-- exchange queue binging key 绑定 -->
    <rabbit:direct-exchange name="kehujia-mq-exchange" durable="true" auto-delete="false" id="kehujia-mq-exchange">
        <rabbit:bindings>
            <rabbit:binding queue="kehujia_inquiry" key="kehujia_inquiry_key"/>
        </rabbit:bindings>
    </rabbit:direct-exchange>
    
    <rabbit:topic-exchange name="kehujia-msg-exchange">
        <rabbit:bindings>
             <rabbit:binding queue="kehujia_message" pattern="kehujia_message.*"/>
             <rabbit:binding queue="kehujia_mail" pattern="kehujia_mail.*"/>
             <rabbit:binding queue="kehujia_sms" pattern="kehujia_sms.*"/>
        </rabbit:bindings>
    </rabbit:topic-exchange>
    
    <rabbit:topic-exchange name="kehujia-mc-exchange">
        <rabbit:bindings>
            <rabbit:binding queue="kehujia_message_center" pattern="kehujia_message_center.*"/>
        </rabbit:bindings>
    </rabbit:topic-exchange>
    
    <rabbit:direct-exchange name="kehujia-delay-exchange" durable="true" auto-delete="false" id="kehujia-delay-exchange">
    <rabbit:bindings>
         <rabbit:binding queue="kehujia_delay_consumer" key="kehujia_delay_consumer"/>
    </rabbit:bindings>
    </rabbit:direct-exchange>
    
    
     <!-- 监听器的bean -->
     <bean id="queueListenter" class="com.iqb.eatep.house.rabbit.mq.data.mq.InquiryQueueListenter"/>
     <bean id="mailQueueListenter" class="com.iqb.eatep.house.rabbit.mq.data.mq.MailQueueListener"/>
     <bean id="messageQueueListenter" class="com.iqb.eatep.house.rabbit.mq.data.mq.MessageQueueListener"/>
     <bean id="messageCenterQueueListenter" class="com.iqb.eatep.house.rabbit.mq.data.mq.MessageCenterQueueListener"/>
     <bean id="smsQueueListenter" class="com.iqb.eatep.house.rabbit.mq.data.mq.SMSQueueListener"/>
     <bean id="delayQueueListenter" class="com.iqb.eatep.house.rabbit.mq.data.mq.DelayQueueListener"/>
   <!-- 配置监听queue-->
    <rabbit:listener-container connection-factory="connectionFactory" acknowledge="auto">
        <rabbit:listener queues="kehujia_inquiry" ref="queueListenter"/>
         <rabbit:listener queues="kehujia_mail" ref="mailQueueListenter"/>
         <rabbit:listener queues="kehujia_message" ref="messageQueueListenter"/>
         <rabbit:listener queues="kehujia_message_center" ref="messageCenterQueueListenter"/>
         <rabbit:listener queues="kehujia_sms" ref="smsQueueListenter"/>
         <rabbit:listener queues="kehujia_delay_consumer" ref="delayQueueListenter"/>
    </rabbit:listener-container>  
</beans>

转载于:https://my.oschina.net/u/3229047/blog/843542

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值