ServiceStack RedisMessageQueueClient奇怪的行为

时间:2013-08-29 13:14:15

标签: c# redis servicestack message-queue

我的基础设施:

  • 主要 - ServiceStack自托管控制台应用。 'Main'向MQ发送消息。
  • 后台 - ServiceStack自托管控制台应用。 'Background'从MQ接收消息。
  • 本地安装的Redis

在'Main'AppHost中我配置了Redis管理器:

container.Register<IRedisClientsManager>(
    new PooledRedisClientManager("localhost:6379"));

然后我在服务的某处运行此代码:

using (var client = new RedisMessageQueueClient(TryResolve<IRedisClientsManager>()))
{
    client.Publish(new TestMessage { Value = "From ping" });
}

一切都很好,我可以在'背景'中得到消息。但是当我在课堂上包装这段代码时会出现问题:

public class MessageQueuePublisher : IMessageQueuePublisher
{
    public void Publish(object message)
    {
        using (var client = new RedisMessageQueueClient(
            EndpointHost.AppHost.TryResolve<IRedisClientsManager>()))
        {
            client.Publish(message);
        }
    }
} 

当我从执行上一个代码的完全相同的地方调用MessageQueuePublisher.Publish方法时,它似乎正常工作(没有抛出异常),但我的消息没有达到“背景”。

这样可以吗?

1 个答案:

答案 0 :(得分:2)

我找到了解决方案。在我的'背景'上我希望消息的类型为TestMessage

mqService.RegisterHandler<TestMessage>(ServiceController.ExecuteMessage);

但是当使用 MessageQueuePublisher.Publish 时,消息的类型为 object ,并且转到对象队列并且未被处理。

所以要解决这个问题,Publish方法应该是通用的:

public void Publish<T>(T message)

它不会改变方法的调用方式,但是代码不是很好,因为如果你看一下,就不清楚为什么要使用泛型。但至少它有效。