如何在使用RabbitMQ RPC和ServiceStack时收到响应消息的通知

时间:2014-12-07 01:13:21

标签: servicestack rabbitmq

在正常情况下,带有回复的消息将发布到response.inq,我理解这是一种很好的方式来通知其他方"某些事情"已经发生了。但是,在使用RPC模式时,响应会返回到临时队列并消失。它是否正确?有没有一种方便的方法,除了发布另一条消息,以实现这种自动通知的行为?

1 个答案:

答案 0 :(得分:2)

Message Workflow文档描述了通过ServiceStack.RabbitMQ调用服务的正常消息工作流:

ServiceStack RabbitMQ Message Workflow

请求/回复

Request/Reply通过指定自己的ReplyTo地址来更改默认消息流,以更改发布响应的队列,例如:

const string replyToMq = mqClient.GetTempQueueName();
mqClient.Publish(new Message<Hello>(new Hello { Name = "World" }) {
    ReplyTo = replyToMq
});

IMessage<HelloResponse> responseMsg = mqClient.Get<HelloResponse>(replyToMq);
mqClient.Ack(responseMsg);
responseMsg.GetBody().Result //= Hello, World!

使用请求/回复模式时,不会在任何其他RabbitMQ主题/队列中发布其他消息,以提醒其他订阅者客户端需要重新发布该消息。

RabbitMqServer callbacks

找出邮件发布或接收时间的另一种方法是使用PublishMessageFilter和客户端上的GetMessageFilterRabbitMqServer回调,以便您检查他们发送的每封邮件或收到,例如:

var mqServer = new RabbitMqServer("localhost") 
{
    PublishMessageFilter = (queueName, properties, msg) => {
        //...
    },
    GetMessageFilter = (queueName, basicMsg) => {
        //...
    }
};