使用默认(直接)交换与为每个队列创建自定义直接交换有什么区别吗?
Aggregation agg = newAggregation(
project("id")
.andExpression("month(createdDate)").as("month_joined")
.andExpression("year(createdDate)").as("year"),
match(Criteria.where("year").is(2016)),
group("month_joined").count().as("number"),
project("number").and("month_joined").previousOperation(),
sort(ASC, "number")
);
AggregationResults<JoinCount> results = mongoTemplate.aggregate(agg,
"collectionName", JoinCount.class);
List<JoinCount> joinCount = results.getMappedResults();
VS
(default exchange) -> queue1
(default exchange) -> queue2
在RabbitMQ仪表板中,我可以看到,如果我为每个队列使用默认交换,它会有更多的消息速率,所以我想知道使用不同的交换是否会提高消息调度的性能...
提前致谢!
答案 0 :(得分:3)
使用默认直接交换与其他交换类型相比,没有显着的性能提升。您将看到的性能差异取决于您在服务器上的内存量,接收单个消息的队列数,是否将消息持久保存到磁盘以及其他因素。
通常,应避免使用默认的直接交换。这听起来很容易,但最终你的排队系统的设计会向后设置,消息发布者知道哪个队列应该接收消息。
这是我第一次开始使用RabbitMQ时犯的错误,它最终让我感到困惑并导致问题。我不知道为什么我需要交换,或者路由密钥的用途是什么。
我在这里写了更多关于此的内容:http://derickbailey.com/2014/11/14/understanding-the-relationship-between-rabbitmq-exchanges-queues-and-bindings/