代码编织梦想

前言

现在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);
    }
}

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/weixin_48470176/article/details/111026691

了解这些坑,再也不会出现诡异的BUG了~-爱代码爱编程

前言 在高并发的情况下,你的程序是不是经常出现一些诡异的 BUG,每次都是花费大量时间排查,但是你有没有思考过这一切罪恶的源头是什么呢? 幕后那些事 CPU、 内存、 I/O设备的速度差异越来越大,这也是程序性能的瓶颈,根据木桶理论,最终决定程序的整体性能取决于最慢的操作- 读写I/O设备,单方面的提高CPU的性能是无用的。 为了平衡

从 CPU 缓存看缓存的套路-爱代码爱编程

一、前言 不同存储技术的访问时间差异很大,从 计算机层次结构 可知,通常情况下,从高层往底层走,存储设备变得更慢、更便宜同时体积也会更大,CPU 和内存之间的速度存在着巨大的差异,此时就会想到计算机科学界中一句著名的话:计算机科学的任何一个问题,都可以通过增加一个中间层来解决。 二、引入中间层——缓存层 为了解决速度不匹配问题,可以通过引入

你必须掌握的 21 个 Java 核心技术!-爱代码爱编程

经过这么多年的Java开发,以及结合平时面试Java开发者的一些经验,我觉得对于J2SE方面主要就是要掌握以下的一些内容。 1. JVM相关 对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解很深,对此里面的概念有一些简单的了解即可。 不过对于一个有着3年以上Java经验的资深开发者来说,不会JVM几乎是不可接受的。 JVM作为ja

汤森路透已完成向亚马逊AWS的大规模迁移,实现数字化转型-爱代码爱编程

亚马逊云服务(AWS)宣布,全球领先的商业信息服务提供商汤森路透已完成向AWS的大规模迁移。作为其数字化转型战略的重要组成部分,此举将使该公司能够加速创新,运用新的行业洞察发展业务,在云端更加敏捷。作为上云的一部分,汤森路透将数千台服务器和数百个创收应用程序迁移到AWS。通过扩展与AWS的长期合作关系,汤森路透利用AWS无与伦比的云服务,包括分析、数

难!难!难!成为架构师真的就难于上青天吗?-爱代码爱编程

架构师是程序员的奋斗目标。   我身边的很多优秀程序员,都在暗暗努力往架构师能力栈靠拢。很多人技术很过硬也参与过大型项目、还有的人对新技术信手拈来、也有一些人勤勤恳恳在努力做好手里的事情。 但你会发现,当他们遇到实际业务场景的架构问题,就变得底气不足。   我曾经看过一家公司的架构设计,突破了我的认知: Memcache 竟然放在 C

为什么要在每张表中加 CreateDate 和 UpdateDate , 亮三点!-爱代码爱编程

点击蓝色“有关SQL”关注我哟 加个“星标”,天天与10000人一起快乐成长 学一门技术要体系化,前两天还在文章中,提出这样的概念。不知道,你们是不是都忘记了? 我看是的,忘得都差不多了。连打卡拿书都忘记了,还有是什么忘不了的。 就在那篇文章刚发出的当天,小伙伴就在群里提出问题了,“我的数据库表有600多万数据了,以前拍着胸脯点给老板看,

三星Galaxy S21开启预购:最早1月14日发布 售价约5300元起-爱代码爱编程

根据此前曝光的消息,全新的三星Galaxy S21系列旗舰将有望提前至明年1月与大家见面,首批搭载全新的高通骁龙888移动平台。随着发布时间的日益临近,目前关于该机的外观和配置的细节已经有了非常详尽的爆料。现在有最新消息,近日有外媒发布最新消息称,该机已在印度开启预购。 据外媒TechQuila最新发布的信息显示,全新的三星Galaxy S

RabbitMQ学习(二)-- 工作模式-爱代码爱编程

目录 一、普通通道 二、工作队列 工作原理如图 源码如下 测试情况 ​控制台打印 二、发布/订阅模式 工作原理图 源码如下 测试情况: 三、routing模式 工作原理 源码 测试情况 四、topic模式 工作原理 源码 测试情况 一、普通通道 代码已经在RabbitMQ学习(一)-- producer&&a

Kafak消息队列与其基础架构-爱代码爱编程

消息队列的两种模式 (1)点对点模式(一对一,消费者主动拉取数据,消息收到后清除) 消息产生者生产消息发送到Queue中,然后消息消费者从Queue中取出并且消费信息。 消息被消费后,Queue中不再有存储,所以消息消费者不可能消费已经被消费的消息,Queue支持存在多个消费者,但是对于一个消息而言,只有一个消费者可以消费。 (2)发布\订阅模式(一对

快速掌握模板方法模式-爱代码爱编程

概述 模板模式就是定义一个操作中的算法骨架,然后将一些步骤延迟到子类中。模板方法使得子类在不改变算法的结构即可重定义该算法的某些步骤。 使用场景 泡茶 我们都知道泡茶基本步骤有: 烧水、选茶叶、泡茶、喝茶水。 这里指的是一般步骤。至于你烧水时用什么烧?热得快、热水壶、还是其他工具,反正目的是把水烧开就好;你选的茶叶是什么茶叶?铁观音、菊花

Pulsar 社区周报| 2020-11-28 ~ 2020-12-04-爱代码爱编程

关于 Apache Pulsar Apache Pulsar 是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体,采用计算与存储分离架构设计,支持多租户、持久化存储、多机房跨区域数据复制,具有强一致性、高吞吐、低延时及高可扩展性等。 项目地址:http://github.com/apac

Dokcer 部署RabbitMQ集群-镜像模式(实战)-爱代码爱编程

概述 RabbiMQ模式 RabbitMQ模式大概分为以下三种: 单一模式。普通模式(默认的集群模式)。镜像模式(把需要的队列做成镜像队列,存在于多个节点,属于RabbiMQ的HA方案,在对业务可靠性要求较高的场合中比较适用)。RabbiMQ模式详解 abbitmq普通集群模式,是将交换机、绑定、队列的元数据复制到集群里的任何一个节点,但队列内容只