我希望能够从我的服务端点中重新排队已通过RabbitMQ服务器的RegisterHandler方法连接的消息。 e.g。
mqServer.RegisterHandler<OutboundILeadPhone>(m =>
{
var db = container.Resolve<IFrontEndRepository>();
db.SaveMessage(m as Message);
return ServiceController.ExecuteMessage(m);
}, noOfThreads: 1);
或在这里。
public object Post(OutboundILeadPhone request)
{
throw new OutBoundAgentNotFoundException(); // added after mythz posted his first response
}
我没有看到任何示例如何实现这一点,所以我开始相信使用ServiceStack抽象可能无法实现。另一方面,this看起来很有希望。
谢谢你,Stephen
更新
在服务中抛出异常会使其失效,但随后将消息发送到OutboundILeadPhone.dlq,这是正常的ServiceStack行为。猜猜我正在寻找的是消息留在OutboundILeadPhone.inq队列中的一种方式。
答案 0 :(得分:1)
在您的服务中抛出异常automatically Nak the message。也可以使用RabbitMqServer的RegisterHandler
API覆盖此默认异常处理行为,该API采用Exception
回调,即:
void RegisterHandler<T>(
Func<IMessage<T>, object> processMessageFn,
Action<IMessage<T>, Exception> processExceptionEx);
void RegisterHandler<T>(
Func<IMessage<T>, object> processMessageFn,
Action<IMessage<T>, Exception> processExceptionEx,
int noOfThreads)