Spring Boot+RabbitMQ 通过fanout模式实现消息接收功能(支持消费者多实例部署)

  本文章适用的场景:同一条消息可以被多个消费者同时消费。注意:当消费者多实例部署时,会轮询消费消息。网上有大量的的案例展示:P生产一条消息,消费者服务C中建立Q1和Q2两个队列共同消费。但极少的材料展示:P生产一条消息后M1,消费者C1和C2可以同时消费M1,如下图所示。案例基于Spring Boot以及RabbitMQ的“fanout”类型exchange。已经实测可放心使用。

1、引入基本依赖,项目不同请您按自己的情况引入合适的依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

2、rabbitmq密码、用户名等配置

  内容过于基础,请网络上自行搜索相关内容。

3、Exchange配置

@Bean
    public FanoutExchange myFanoutExchange() {
  //“my.fanout”仅用于演示,请按自己的项目情况选择合适的、有意义的命名
        return new FanoutExchange("my.fanout", true, false);
    }
    @Bean
    public Queue anonymousQueue() {
        //注意:必须使用匿名队列才能达到本文目标,此匿名队列实例的名称在消费端会被使用
        return new AnonymousQueue();
    public Binding bindAnonymousQueue() {
        return BindingBuilder.bind(anonymousQueue()).to(myFanoutExchange());

4、发送端代码

//构建回调返回的数据
        CorrelationData correlationData = new CorrelationData(UUIDUtils.getUUID());

        Message msg = MessageBuilder.withBody(message.getBytes())
                .setContentType(MessageProperties.CONTENT_TYPE_TEXT_PLAIN)
                .setCorrelationId(correlationData.getId())
                .build();
        try {
            rabbitTemplate.convertAndSend(exchangeName, null, msg, correlationData);
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        }

注意:“fanout"模式直接将消息发送到“exchange”,routing key应为null或“”,如果您的代码只需要发送消息而无接收,请忽略第3小节“Exchange配置”中所示代码

5、消费者代码

@Service
public class MyListener {
    @RabbitListener(queues = "#{anonymousQueue.name}")
    public void receive(String message, Message message1, Channel channel) {
        try {
            //your code
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        } finally {
            long deliverTag = message1.getMessageProperties().getDeliveryTag();
            channel.basicAck(deliverTag, false);
        }
    }
}

  代码“@RabbitListener…”中的“#{anonymousQueue.name}”中的“anonymousQueue”对应第3小节“Exchange配置”中所声明的匿名队列实例。

到此这篇关于Spring Boot+RabbitMQ 通过fanout模式实现消息接收(支持消费者多实例部署)的文章就介绍到这了,更多相关Spring Boot RabbitMQ实现消息接收内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • spring boot整合RabbitMQ实例详解(Fanout模式)

    1.Fanout Exchange介绍 Fanout Exchange 消息广播的模式,不管路由键或者是路由模式,会把消息发给绑定给它的全部队列,如果配置了routing_key会被忽略. 如上图所示,即当使用fanout交换器时,他会将消息广播到与该交换器绑定的所有队列上,这有利于你对单条消息做不同的反应. 例如存在以下场景:一个web服务要在用户完善信息时,获得积分奖励,这样你就可以创建两个对列,一个用来处理用户信息的请求,另一个对列获取这条消息是来完成积分奖励的任务. 2.代码示例 1).

  • Spring Boot+RabbitMQ 通过fanout模式实现消息接收功能(支持消费者多实例部署)

    本文章适用的场景:同一条消息可以被多个消费者同时消费.注意:当消费者多实例部署时,会轮询消费消息.网上有大量的的案例展示:P生产一条消息,消费者服务C中建立Q1和Q2两个队列共同消费.但极少的材料展示:P生产一条消息后M1,消费者C1和C2可以同时消费M1,如下图所示.案例基于Spring Boot以及RabbitMQ的“fanout”类型exchange.已经实测可放心使用. 1.引入基本依赖,项目不同请您按自己的情况引入合适的依赖 <dependency> <groupId>o

  • Spring Boot 使用 Disruptor 做内部高性能消息队列

    目录 Disruptor介绍 Disruptor 的核心概念 Ring Buffer Sequence Disruptor Sequencer Sequence Barrier Wait Strategy Event EventProcessor EventHandler Producer 案例-demo 总结 工作中遇到项目使用Disruptor做消息队列,对你没看错,不是Kafka,也不是rabbitmq.Disruptor有个最大的优点就是快,还有一点它是开源的哦,下面做个简单的记录. D

  • 详解在Spring Boot框架下使用WebSocket实现消息推送

    spring Boot的学习持续进行中.前面两篇博客我们介绍了如何使用Spring Boot容器搭建Web项目以及怎样为我们的Project添加HTTPS的支持,在这两篇文章的基础上,我们今天来看看如何在Spring Boot中使用WebSocket. 什么是WebSocket WebSocket为浏览器和服务器之间提供了双工异步通信功能,也就是说我们可以利用浏览器给服务器发送消息,服务器也可以给浏览器发送消息,目前主流浏览器的主流版本对WebSocket的支持都算是比较好的,但是在实际开发中使

  • Spring Boot 会员管理系统之处理文件上传功能

    温馨提示 Spring Boot会员管理系统的中,需要涉及到Spring框架,SpringMVC框架,Hibernate框架,thymeleaf模板引擎.所以,可以学习下这些知识.当然,直接入门的话使用是没问题,但是,涉及到一些异常和原理的话可能就有些困难. 1. 前端部分 在前端部分addMember.html是通过form表单来提交会员的信息,其中就包括了图片上传功能(这里涉及了文件上传操作),表单部分代码如下: <form th:action="@{/admin/addMember}

  • Spring boot 实现单个或批量文件上传功能

    一:添加依赖: <!-- thymeleaf模板插件 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <!-- jsp依赖 --> <dependency> <groupId>j

  • Spring Boot 2.2 正式发布,大幅性能提升 + Java 13 支持

    之前 Spring Boot 2.2没能按时发布,是由于 Spring Framework 5.2 的发布受阻而推迟.这次随着 Spring Framework 5.2.0 成功发布之后,Spring Boot 2.2 也紧跟其后,发布了第一个版本:2.2.0.下面就来一起来看看这个版本都更新了些什么值得我们关注的内容. 组件版本更新 这些Spring框架组件更新了依赖版本: Spring AMQP 2.2 Spring Batch 4.2 Spring Data Moore Spring Fr

  • Spring Boot 2 整合 QuartJob 实现定时器实时管理功能

    一.QuartJob简介 1.一句话描述 Quartz是一个完全由java编写的开源作业调度框架,形式简易,功能强大. 2.核心API (1).Scheduler 代表一个 Quartz 的独立运行容器,Scheduler 将 Trigger 绑定到特定 JobDetail, 这样当 Trigger 触发时, 对应的 Job 就会被调度. (2).Trigger 描述 Job 执行的时间触发规则.主要有 SimpleTrigger 和 CronTrigger 两个子类,通过一个 TriggerK

  • Spring Boot Admin 添加报警提醒和登录验证功能的具体实现

    目录 1.添加报警提醒功能 1.1 添加邮件支持框架 1.2 配置收.发邮箱信息 1.2.1 开启 SMTP 服务 1.2.2 生成授权码 1.3 邮件报警测试 1.4 注意事项 1.5 配置多个报警通知邮箱 2.访问权限设置 2.1 添加 Security 框架支持 2.2 设置登录账户 2.3 权限资源设置 2.4 访问 SBA 总结 Spring Boot Admin(SBA)是一个开源的社区项目,用于管理和监控 Spring Boot 应用程序,它提供了详细的健康信息.内存信息.JVM

  • spring boot实现图片上传到后台的功能(浏览器可直接访问)

    目录 1. 配置上传文件最大数值 2. 配置虚拟路径映射 3. 编写controller程序 4. 测试 1. 配置上传文件最大数值 默认情况下,在spring boot嵌入的tomcat限制了上传文件的大小,在spring boot的我官方文档中说明,每个文件的最大配置为1Mb,单次请求的总文件数不能大于10Mb. 这意味着如果你上传的图片大于1Mb,会被拦截下来,无法正常保存到后台,并抛出一个错误,返回状态码:500. The field file exceeds its maximum p

  • Spring Boot RabbitMQ 延迟消息实现完整版示例

    概述 曾经去网易面试的时候,面试官问了我一个问题,说 下完订单后,如果用户未支付,需要取消订单,可以怎么做 我当时的回答是,用定时任务扫描DB表即可.面试官不是很满意,提出: 用定时任务无法做到准实时通知,有没有其他办法? 我当时的回答是: 可以用队列,订单下完后,发送一个消息到队列里,并指定过期时间,时间一到,执行回调接口. 面试官听完后,就不再问了.其实我当时的思路是对的,只不过讲的不是很专业而已.专业说法是利用 延迟消息 . 其实用定时任务,确实有点问题,原本业务系统希望10分钟后,如果订

随机推荐