如何在RegisterHandler中修改ServiceStack RabbitMQ消息?

时间:2014-12-17 05:56:52

标签: servicestack rabbitmq

我希望能够从我的服务端点中重新排队已通过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队列中的一种方式。

1 个答案:

答案 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)