Spring Cloud Stream Rabbit 3.2.1消费者分组与消息分区

news/2024/6/16 18:08:52 标签: rabbitmq, java, 分布式

1.前言

在入门实践中,我们提到过启动应用程序创建的是临时队列,在应用停止时会被自动删除,其原因是当我们未指定group属性时,创建的都是会自动删除的匿名队列。当我们指定了group属性后,队列名称则为destination.group。例如sms-exchange.group01

2.队列持久化

2.1 yml配置

spring:
  rabbitmq:
    host: 192.168.1.92
    port: 5672
    username: stone
    password: 123456
    virtual-host: /test
  cloud:
    stream:
      bindings:
        sms-out-0: # 自定义生产者通道名称
          destination: sms-exchange # 自定义Exchange交换机名称,生产者和消费者需要配置同一个Exchange
        sms-in-0: # 自定义消费者通道名称
          destination: sms-exchange # 自定义Exchange交换机名称,生产者和消费者需要配置同一个Exchange
          group: group01

启动应用我们会得到一个持久化的队列
在这里插入图片描述

当生产者向指定Exchange发送了一条消息时,处于同一个group的消费者只会消费一次消息,不会出现重复消费,当然如果消费者处于两个不同的group,消费消息是不受影响的。

3.消息分区

RabbitMQ本身不支持消息分区,有时候,将数据发送到特定的分区是非常有必要的。我们可以将一些特定的消息发送到同一个分区。

3.1 yml配置

spring:
  application:
    name: sms
  rabbitmq:
    host: 192.168.1.2
    port: 5672
    username: guest
    password: guest
    virtual-host: /test
  cloud:
    stream:
      bindings:
        sms-out-0: # 自定义生产者通道名称
          destination: sms-exchange # 自定义Exchange交换机名称,生产者和消费者需要配置同一个Exchange
          producer:
            partitionKeyExpression: payload #payload的含义是让算法根据我们消息的内容进行分区计算,我们可以自定义分区算法
            partition-count: 2
        sms-in-0: # 自定义消费者通道名称
          destination: sms-exchange # 自定义Exchange交换机名称,生产者和消费者需要配置同一个Exchange
          group: group01
          consumer:
            partitioned: true # 消费开启分区
      instance-count: 2 # 应用程序部署的实例数
      instance-index: 0 # 应用程序实例的索引数,如果instance-count=2的话,那instance-index分别就是0,1

这时候我们在启动两个消费者实例,就会发现接收到的消息是进过分区处理的


http://www.niftyadmin.cn/n/1169509.html

相关文章

mysql-client客户端安装

测试、生产环境中,有时并不需要在本地安装一个mysql server服务,只需要安装一个登录mysql server 的mysql的客户端client centos6系统上安装mysql-client的方式:yum install mysql-clent mysql-devel -y centos7的系统上安装mysql client的方…

Python 高级特性

1.迭代 *可以通过for循环来遍历这个列表或者元组,这种遍历为迭代 *只要是可迭代对象,无论有无下标,都可迭代 *判断一个对象是否是可迭代对象,有collections模块的Iterable判断 *枚举方法emumerate,把列表变成索引-元素对 *两个变量…

Tensorflow源码解析2 -- 前后端连接的桥梁 - Session

Session概述 1. Session是TensorFlow前后端连接的桥梁。用户利用session使得client能够与master的执行引擎建立连接,并通过session.run()来触发一次计算。它建立了一套上下文环境,封装了operation计算以及tensor求值的环境。 2. session创建时&#xff0…

自制一个 elasticsearch-spring-boot-starter

概 述 Elasticsearch 在企业里落地的场景越来越多了,但是大家在项目里使用 Elasticsearch的姿势也是千奇百怪,这次正好自己需要使用,所以干脆就封装一个 elasticsearch-spring-boot-starter以供复用好了。如果不知道 spring-boot-starter该如…

Vmware vSphere常见问题汇总(七)

60、在view桌面中,Win7下安装出现软件出现“系统管理员设置了系统策略,禁止进行此安装”的提示 解决方案:1、打开“开始->控制面板->管理工具->本地安全策略”->点击“软件限制策略”,如果提示“没有定义软件限制策略…

Docker入门实践-Docker镜像与容器

1.Docker镜像 Docker运行容器前需要本地存在对应的镜像,如果镜像不存在,会尝试从远端镜像仓库中拉取 1.1 拉取镜像 # 完整写法 docker image pull [OPTIONS] NAME[:TAG|DIGEST] # 简略写法 docker pull [OPTIONS] NAME[:TAG|DIGEST] docker pull hello-…

逻辑回归介绍

2019独角兽企业重金招聘Python工程师标准>>> 逻辑回归模型logit(pi ) 事件发生概率的logit 回归的截距 第k个预测变量的参数估计 其中Logit是 发生比(odds)的自然对数 i 表示案例(观察值) pi 在第i个案例中一个事件…

Day 01

今日内容:python基础:一 编程语言什么是编程语言?#用来定义计算机程序的形式语言。它是一种被标准化的交流技巧,用来向计算机发出指令。一种计算机语言让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下所应当采取的行…