在RabbitMQ中使用不同交换的任何优势?

时间:2016-02-10 11:25:03

标签: rabbitmq message-queue amqp

使用默认(直接)交换与为每个队列创建自定义直接交换有什么区别吗?

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仪表板中,我可以看到,如果我为每个队列使用默认交换,它会有更多的消息速率,所以我想知道使用不同的交换是否会提高消息调度的性能...

提前致谢!

1 个答案:

答案 0 :(得分:3)

使用默认直接交换与其他交换类型相比,没有显着的性能提升。您将看到的性能差异取决于您在服务器上的内存量,接收单个消息的队列数,是否将消息持久保存到磁盘以及其他因素。

通常,应避免使用默认的直接交换。这听起来很容易,但最终你的排队系统的设计会向后设置,消息发布者知道哪个队列应该接收消息。

这是我第一次开始使用RabbitMQ时犯的错误,它最终让我感到困惑并导致问题。我不知道为什么我需要交换,或者路由密钥的用途是什么。

我在这里写了更多关于此的内容:http://derickbailey.com/2014/11/14/understanding-the-relationship-between-rabbitmq-exchanges-queues-and-bindings/