定制网站rabbitmq多个消费者消费同一个队列中的同一条消息。

提示:定制网站文章写完后,定制网站目录可以自动生成,定制网站如何生成可参考右边的帮助文档

文章目录


前言

使用springboot整合实现,定制网站一个生产者生产一条数据,定制网站多个消费者消费同一条数据案例,定制网站可以解决微服务分布式事务控制。保证最终一致性原则。


提示:以下是本篇文章正文内容,下面案例可供参考

一、rabbitmq是什么?

相对简易得一种消息中间件,功能强大,性能中等,吞吐量一般。

二、使用步骤

1.引入库

代码如下(示例):

 <!-- rabbitmq消息队列-->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-amqp</artifactId>        </dependency>        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>fastjson</artifactId>            <version>1.2.62</version>        </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

2.rabbitmq相关配置

@Configurationpublic class RabbitmqConfig {	@Bean    public Queue queue1() {        return new Queue("queue1",true);    }    @Bean    public FanoutExchange exchange1() {        return new FanoutExchange("exchange1",true, false);    }    @Bean    public Binding binding1() {        return BindingBuilder.bind(queue1()).to(exchange1());    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

注:因为是fanout广播模式,所以不用配置路由键。

3.生产者代码

代码如下(示例):

@Resourceprivate RabbitTemplate rabbitTemplate;@Testpublic void pushMessage() {    HashMap<Object, Object> hashMap = new HashMap<>();    hashMap.put("name","zhangsan");    hashMap.put("age","18");    rabbitTemplate.convertAndSend("exchange1","", hashMap);}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

4.多个消费者,消费同一条数据。

消费者1号:
代码如下(示例):

@Componentpublic class RabbitMqConsumer {//    @RabbitListener(queues = "queue1")    @RabbitListener(bindings = @QueueBinding(            // value = @Queue(value = "queue1"),		value = @Queue(), //切记: 此处无需设置队列名称,否在得话,多个消费者只有一个消费者能消费数据。其它消费者无法消费数据。        exchange = @Exchange(value = "exchange1",type = ExchangeTypes.FANOUT)    ))    public void getData(Message message) {        try {            String str = new String(message.getBody(),"utf-8");            System.out.println(str);        } catch (Exception e) {            e.printStackTrace();        }    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

消费者2号:
代码如下(示例):

@Componentpublic class RabbitMqConsumer {	// @RabbitListener(queues = "queue1")    @RabbitListener(bindings = @QueueBinding(	// value = @Queue(value = "queue1"),		value = @Queue(), //切记: 此处无需设置队列名称,否在得话,多个消费者只有一个消费者能消费数据。其它消费者无法消费数据。        exchange = @Exchange(value = "exchange1",type = ExchangeTypes.FANOUT)    ))    public void getData(Message message) {        try {            String str = new String(message.getBody(),"utf-8");            System.out.println(str);        } catch (Exception e) {            e.printStackTrace();        }    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

结束,希望能够帮助各位。


总结

人生物语:活得优雅些。也许你的生活并不富裕;也许你的工作不够好;也许你正处在困境中;也许你被情所弃。不论什么原因,请你在出门时,一定要让自己面带微笑,从容自若地去面对生活。只要你自己真正撑起来了,别人无论如何是压不垮你的。

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发