springrabbitmq中使用@RabbitListener实现监听消息-传统spring-springmvc项目整合rabbitmq

前言

现在java项目使用rabbitmq大多都使用spring-boot,但由于有些传统的Springmvc项目中需要改造引入rabbitmq,这一块的资料比较少,质量也差,官方文档也。。。,本人整理由自己学习也共给大家参考,请大家根据实际情况选择使用。

使用配置手动监听简单,百度下资料也有很多。有强迫症的人肯定接受不了这种每次增加一个队列都需要改一下配置文件的傻瓜式操作。

本章也只讲如何在传统Spring项目中(非Springboot)使用@RabbitListener注解来实现监听

安装参考: https://blog.csdn.net/weixin_48470176/article/details/111189053

如何使用@RabbitListener

1.配置文件


<!-- 1.基础配置,此处必须 -->
<rabbit:connection-factory id="connectionFactory"
                               host="${rabbitmq.host}"
                               port="${rabbitmq.port}"
                               virtual-host="${rabbitmq.virtual-host}"
                               username="${rabbitmq.username}"
                               password="${rabbitmq.password}"/>

<!-- 2.推荐-非必须,不适用admin则需要手动在rabbitmq后台添加exchagne,queue等信息 -->
    <rabbit:admin connection-factory="connectionFactory"/>

<!-- 3.推荐-json序列化,非必须,在这里向使用这种模式调通,然后再直接去修改或使用默认-->
    <bean id="jsonMessageConverter" class="org.springframework.amqp.support.converter.Jackson2JsonMessageConverter"/>


<!-- 4.发送消息必须,不多说了,存接收mq消息可不用-->
    <rabbit:template id="rabbitTemplate" connection-factory="connectionFactory"
        message-converter="jsonMessageConverter"
    />

<!-- 5.推荐,非必须,需要发送消息建议加上 -->
<rabbit:queue name="orderQueue" id="orderQueue"></rabbit:queue>
    <rabbit:topic-exchange name="MyTopicExchange" >
        <rabbit:bindings>
            <rabbit:binding queue="orderQueue" pattern="*.order"></rabbit:binding>
        </rabbit:bindings>
    </rabbit:topic-exchange>

<!--6.【必须】重点-->
<bean id="rabbitListenerContainerFactory"
          class="org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory">
       <property name="connectionFactory" ref="connectionFactory"/>
       <property name="messageConverter" ref="jsonMessageConverter"/>
   </bean>

<!-- 7.推荐,非必须,如果不加入此配置,可以再类中使用@EnableRabbit也可以,建议加上此配置-->
   <!-- <rabbit:annotation-driven /> -->

仔细看注释

 

2.实现代码

仔细看注释

@Component
//注意:配置文件中未添加<rabbit:annotation-driven />,则需要这里添加,有则不需要
@EnableRabbit 
public class OrderListener2 {
    private Logger logger = LoggerFactory.getLogger(OrderListener2.class);

    
/*
    @RabbitListener(queues = {"orderQueue"})
    public void receive(Message message){

        logger.info("接收到mq消息:{}",new String(message.getBody(), Charset.forName("utf-8")));
    }

*/
    //使用json转换时可以直接实现对象传参数
    @RabbitListener(queues = {"orderQueue"})
    public void receive(Order order){

        logger.info("receive mq order:[{}}]",order);
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_48470176/article/details/111026691