在正常情况下,带有回复的消息将发布到response.inq,我理解这是一种很好的方式来通知其他方"某些事情"已经发生了。但是,在使用RPC模式时,响应会返回到临时队列并消失。它是否正确?有没有一种方便的方法,除了发布另一条消息,以实现这种自动通知的行为?
答案 0 :(得分:2)
Message Workflow文档描述了通过ServiceStack.RabbitMQ调用服务的正常消息工作流:
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主题/队列中发布其他消息,以提醒其他订阅者客户端需要重新发布该消息。
找出邮件发布或接收时间的另一种方法是使用PublishMessageFilter
和客户端上的GetMessageFilter
和RabbitMqServer
回调,以便您检查他们发送的每封邮件或收到,例如:
var mqServer = new RabbitMqServer("localhost")
{
PublishMessageFilter = (queueName, properties, msg) => {
//...
},
GetMessageFilter = (queueName, basicMsg) => {
//...
}
};