Springboot怎么整合RabbitMQ消息队列

生产者工程

POM依赖

可以在创建工程时直接选择添加依赖。

Springboot怎么整合RabbitMQ消息队列

Springboot怎么整合RabbitMQ消息队列

application文件

因为rabbitmq具有默认地址及用户信息,所以如果是本地rabbitmq可以不需要进行配置。

Springboot怎么整合RabbitMQ消息队列

Springboot怎么整合RabbitMQ消息队列

RabbitMQ配置文件:

在使用相关交换机及队列时,我们需要实现声明交换机及队列,如果没有对应信息,则启动项目会失败。所以在使用springboot整合rabbitmq时,我们可以通过配置文件来进行交换机、队列的声明及二者之间的关系绑定。 由于目前在演示Fanout模式,所以使用FanoutExchange来声明交换机,其他模式则使用相对应的TopicExchange,DirectExchange来声明。

@Configurationpublic class RabbitMQConfiguration {//声明fanout模式的交换机@Beanpublic FanoutExchange fanoutExchange() {    return new FanoutExchange("fanout_order_exchange", true, false);}//声明队列@Beanpublic Queue smsQueue() {    return new Queue("sms.fanout.queue", true);}@Beanpublic Queue emailQueue() {    return new Queue("email.fanout.queue", true);}@Beanpublic Queue duanxinQueue() {    return new Queue("duanxin.fanout.queue", true);}//绑定@Beanpublic Binding smsBinding() {    return BindingBuilder.bind(smsQueue()).to(fanoutExchange());}@Beanpublic Binding emailBinding() {    return BindingBuilder.bind(emailQueue()).to(fanoutExchange());}@Beanpublic Binding duanxinBinding() {    return BindingBuilder.bind(duanxinQueue()).to(fanoutExchange());}}

登录后复制

生产者业务代码

这部分代码就简单的通过调用rabbitTemplate来进行消息的分发。@Service public class OrderService {

@Autowiredprivate RabbitTemplate rabbitTemplate;public void makeOrder() {    // 保存订单    String orderId = UUID.randomUUID().toString();    System.out.println("下单成功:" + orderId);    // 通过MQ完成消息的分发    // 参数1:交换机 ;参数2:路由key/队列名;参数3:消息内容    String exchangeName = "fanout_order_exchange";    rabbitTemplate.convertAndSend(exchangeName, "", orderId);}}

登录后复制

消费者:

消费者工程和生产者工程类似,我们首先需要引入依赖,然后在application文件中进行相关的配置即可开始编写代码。 在消费者工程中我们也可以编写rabbitmq的配置文件来进行交换机及队列的声明。建议在消费端编写配置文件,因为消费端是先启动的工程,如果交换机和队列未创建会导致工程启动失败。 消息监听

我们通过RabbitListener注解来监听消息队列。需要注意的是我们需要通过Component注解将该监听交给spring管理,否则不能正常接收服务端的消息。 这边只给出一个email的消息监听,上文生产者声明的duanxin,sms队列可以自行创建,只需要修改队列名即可。@Service public class OrderService {

@RabbitListener(queues = {"email.fanout.queue"})@Componentpublic class FanoutEmailService {    @RabbitHandler    public void receive(String message) {        System.out.println("email fanout -----》接收到" + message);    }}

登录后复制

测试

首先启动消费者工程,然后在生产者工程中创建测试类发送消息即可。

@SpringBootTest class SpringbootOrderRabbitmqProducerApplicationTests {@Autowiredprivate OrderService orderService;@Testvoid contextLoads() {    orderService.makeOrder();}}

登录后复制

当发送消息后,我们可以在控制台中发现消费者成功接受消息。

Springboot怎么整合RabbitMQ消息队列

Direct 模式

生产者

建立工程的步骤和上文相同。

配置文件

配置和上文基本相同,由于该部分测试direct模式,所以需要使用DirectExchange创建交换机。需要注意的是该类中的方法名不能和上文rabbitmq的配置文件中的方法名相同,因为我们使用bean注解将其交给spring管理,如果名字相同,则会启动项目失败。

@Configurationpublic class DirectRabbitMQConfiguration {//声明direct模式的交换机@Beanpublic DirectExchange directExchange() {    return new DirectExchange("direct_order_exchange", true, false);}//声明队列@Beanpublic Queue smsDirectQueue() {    return new Queue("sms.direct.queue", true);}@Beanpublic Queue emailDirectQueue() {    return new Queue("email.direct.queue", true);}@Beanpublic Queue duanxinDirectQueue() {    return new Queue("duanxin.direct.queue", true);}//绑定@Beanpublic Binding smsDirectBinding() {    return BindingBuilder.bind(smsDirectQueue()).to(directExchange()).with("sms");}@Beanpublic Binding emailDirectBinding() {    return BindingBuilder.bind(emailDirectQueue()).to(directExchange()).with("email");}@Beanpublic Binding duanxinDirectBinding() {    return BindingBuilder.bind(duanxinDirectQueue()).to(directExchange()).with("duanxin");}}

登录后复制

业务代码

@Servicepublic class OrderService {    @Autowired    private RabbitTemplate rabbitTemplate;    public void makeOrderDirect() {        // 保存订单        String orderId = UUID.randomUUID().toString();        System.out.println("下单成功:" + orderId);        String exchangeName = "direct_order_exchange";        rabbitTemplate.convertAndSend(exchangeName, "sms", orderId);        rabbitTemplate.convertAndSend(exchangeName, "email", orderId);    }}

登录后复制

消费者

消息监听

和上文相同,只需注意队列名即可。

@RabbitListener(queues = {"email.direct.queue"})@Componentpublic class DirectEmailService {    @RabbitHandler    public void receive(String message) {        System.out.println("email direct -----》接收到" + message);    }}

登录后复制

Topic 模式

上文中个模式都是通过配置文件来声明交换机,队列及绑定二者之间的关系;实际上我们还可以通过注解的方式来声明交换机及注解。

生产者

由于使用注解方式声明,所以我们不需要创建配置文件,直接编写业务代码即可。测试的时候我们只需修改路由名即可,具体如何修改,请前往文章开头链接查看各模式是如何使用的。

@Servicepublic class OrderService {@Autowiredprivate RabbitTemplate rabbitTemplate;public void makeOrderTopic() {    // 保存订单    String orderId = UUID.randomUUID().toString();    System.out.println("下单成功:" + orderId);    String exchangeName = "topic_order_exchange";    String routingKey = "com.email";    rabbitTemplate.convertAndSend(exchangeName, routingKey, orderId);}}

登录后复制

消费者

代码和上文基本相同,区别在于我们直接在RabbitListener注解中将队列和交换机进行绑定。需要注意的是各参数中都是使用字符串。 value对应的是队列,相应的参数分别是队列名、持久化、自动删除。 exchange对应的交换机,相应的参数分别是交换机名以及交换机类型。 key对应的是路由名。

@RabbitListener(bindings = @QueueBinding(        value = @Queue(value = "email.topic.queue",durable = "true",autoDelete = "false"),        exchange = @Exchange(value = "topic_order_exchange",type = ExchangeTypes.TOPIC),        key = "*.email.#"))@Componentpublic class TopicEmailService {    @RabbitHandler    public void receive(String message) {        System.out.println("email topic -----》接收到" + message);    }}

登录后复制

以上就是Springboot怎么整合RabbitMQ消息队列的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2590850.html

(0)
上一篇 2025年3月6日 16:43:27
下一篇 2025年3月6日 16:43:36

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • SpringBoot怎么整合RabbitMQ处理死信队列和延迟队列

    简介 rabbitmq消息简介 RabbitMQ的消息默认不会超时。  什么是死信队列?什么是延迟队列? 死信队列: DLX,全称为Dead-Letter-Exchange,可以称之为死信交换器,也有人称之为死信邮箱。当消息在一个队列中变成…

    编程技术 2025年3月6日
    200
  • SpringBoot整合消息队列RabbitMQ的方法是什么

    简介 在spring项目中,可以使用spring-rabbit去操作rabbitmq 尤其是在spring boot项目中只需要引入对应的amqp启动器依赖即可,方便的使用RabbitTemplate发送消息,使用注解接收消息。 一般在开发…

    编程技术 2025年3月6日
    200
  • SpringBoot怎么整合RabbitMQ实现延迟队列

    如何保证消息不丢失 rabbitmq消息投递路径 生产者->交换机->队列->消费者 总的来说分为三个阶段。 1.生产者保证消息投递可靠性。 2.mq内部消息不丢失。 3.消费者消费成功。 什么是消息投递可靠性 简单点说就…

    编程技术 2025年3月6日
    200
  • SpringBoot怎么集成Redisson实现延迟队列

    使用场景 1、下单成功,30分钟未支付。支付超时,自动取消订单 2、订单签收,签收后7天未进行评价。订单超时未评价,系统默认好评 3、下单成功,商家5分钟未接单,订单取消 4、配送超时,推送短信提醒 …… 对于延时比较长的场景、实时性不高的…

    2025年3月6日
    200
  • PHP开发:使用 RabbitMQ 实现任务队列

    随着互联网的不断发展,网站的流量越来越大,访问量的增长带来的问题也越来越多。当用户量过大时,服务器负载会增大,这时就需要使用一些技术手段来解决这些问题。任务队列就是其中的一种方式,可以将一些耗时的操作异步执行,从而缓解服务器压力。本文将介绍…

    编程技术 2025年3月6日
    200
  • Java API 开发中使用 RabbitMQ 进行异步消息处理

    随着互联网的快速发展,异步消息处理在分布式系统中扮演着重要的角色,可以提高系统的可靠性和并发性。rabbitmq是一种开源的消息队列系统,可以快速可靠地传递消息,被广泛应用于互联网领域。本文将介绍在java api开发中如何使用rabbit…

    编程技术 2025年3月6日
    200
  • PHP实现开源RabbitMQ SDK

    rabbitmq是一种基于amqp(advanced message queuing protocol)协议的消息队列,被广泛用于解耦、异步处理等场景。而php作为一种高度流行的动态语言,也有众多开源的rabbitmq sdk可供选择。本文…

    编程技术 2025年3月6日
    200
  • PHP和RabbitMQ集成实现消息队列处理

    随着应用系统的不断扩大,消息处理已经成为了一个非常重要的工作。而为了更好地处理消息,许多应用系统都采用了消息队列技术。消息队列技术可以实现异步处理消息,将消息缓存在队列中,实现“生产者-消费者”模式,可以提高系统的可伸缩性和容错性。 而在实…

    编程技术 2025年3月6日
    200
  • PHP开发中如何使用RabbitMQ实现消息传递

    rabbitmq是一种消息队列软件,可用于在应用程序之间进行消息传递。在php开发中,使用rabbitmq可以实现异步处理任务、实现分布式系统等。本篇文章将介绍如何在php开发中使用rabbitmq实现消息传递。 一、安装RabbitMQ服…

    编程技术 2025年3月6日
    200
  • 如何使用Java开发一个基于RabbitMQ的消息队列应用

    如何使用Java开发一个基于RabbitMQ的消息队列应用 引言:消息队列是现代分布式系统中常用的一种通信机制,它可以解耦发送者和接收者,提高系统的健壮性和可扩展性。RabbitMQ是一个轻量级的、可靠的开源消息队列系统,它基于AMQP协议…

    2025年3月6日
    200

发表回复

登录后才能评论