Spring cloud stream【消息分区】,nginx负载均衡原理

创建项目


将我们上篇文章中的分组的三个项目,拷贝一份修改名称及服务名称

在这里插入图片描述

没有分区的情况下演示


发送多条消息查看效果

@RunWith(SpringRunner.class)

@SpringBootTest(classes=StreamSenderStart.class)

public class StreamTest {

@Autowired

private ISendeService sendService;

@Test

public void testStream(){

Product p = new Product(999, “stream test …999”);

// 将需要发送的消息封装为Message对象

Message message = MessageBuilder

.withPayload§

.build();

for (int i = 0; i < 10; i++) {

// 发送多条消息到队列中

sendService.send().send(message );

}

}

}

10条消息被随机的分散到了两个消费者中:

在这里插入图片描述

在这里插入图片描述

我们可以看到A中6条消息,B中4条消息,而且这是随机的,下次执行的结果肯定不一样。

分区


1.发送者中配置

spring.application.name=stream-partition-sender

server.port=9060

#设置服务注册中心地址,指向另一个注册中心

eureka.client.serviceUrl.defaultZone=http://dpb:123456@eureka1:8761/eureka/,http://dpb:123456@eureka2:8761/eureka/

#rebbitmq 链接信息

spring.rabbitmq.host=192.168.88.150

spring.rabbitmq.port=5672

spring.rabbitmq.username=dpb

spring.rabbitmq.password=123

spring.rabbitmq.virtualHost=/

对应 MQ 是 exchange outputProduct自定义的信息

spring.cloud.stream.bindings.outputProduct.destination=exchangeProduct

#通过该参数指定了分区键的表达式规则

spring.cloud.str

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

eam.bindings.outputProduct.producer.partitionKeyExpression=payload

#指定了消息分区的数量。

spring.cloud.stream.bindings.outputProduct.producer.partitionCount=2

2.消费者中配置

服务A

spring.application.name=stream-partition-receiverA

server.port=9070

#设置服务注册中心地址,指向另一个注册中心

eureka.client.serviceUrl.defaultZone=http://dpb:123456@eureka1:8761/eureka/,http://dpb:123456@eureka2:8761/eureka/

#rebbitmq 链接信息

spring.rabbitmq.host=192.168.88.150

spring.rabbitmq.port=5672

spring.rabbitmq.username=dpb

spring.rabbitmq.password=123

spring.rabbitmq.virtualHost=/

对应 MQ 是 exchange 和消息发送者的 交换器是同一个

spring.cloud.stream.bindings.inputProduct.destination=exchangeProduct

具体分组 对应 MQ 是 队列名称 并且持久化队列 inputProduct 自定义

spring.cloud.stream.bindings.inputProduct.group=groupProduct999

#开启消费者分区功能

spring.cloud.stream.bindings.inputProduct.consumer.partitioned=true

#指定了当前消费者的总实例数量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值