赞
踩
在《RabbitMQ实践——交换器(Exchange)和绑定(Banding)》中,我们熟悉了Direct、Fanout、Topic和Header这4种系统默认支持的交换器。这些交换器基本可以满足我们日常的需求。我们还可以添加一些设计,让其支持更加丰富的功能。比如我们可以通过Topic的设计,达到“负载均衡”的功能。
如果不想做这样的设计,可以使用RabbitMQ自身携带,只是未开启的一致性Hash交换器,来实现对队列的平均分流。这样我们让更多消费者订阅不同的队列,来增加整理系统的处理能力。
在RabbitMQ所在的服务终端上执行:
sudo -H -u rabbitmq bash -c "/usr/lib/rabbitmq/bin/rabbitmq-plugins enable rabbitmq_consistent_hash_exchange"
这样我们就可以新建该类型交换器
在一致性Hash交换器中,绑定关系的Routing key被当做权重使用。如果数值越大,被路由到对应的队列上的消息也越多。
本例我们测试“负载均衡”的场景,所以把三个队列的路由权重都设置的比较低且一致。
public boolean sendToXConsistentHashExchange(String exchangeName, Long count) {
for (int i = 0; i < count; i++) {
int hash = Integer.hashCode(i);
rabbitTemplate.convertAndSend(exchangeName, String.valueOf(hash), "Message " + i);
}
return true;
}
然后发送10,0000条消息
可以看到消息被相对均衡的路由到各个队列上
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。