c# - ServiceStack RedisMessageQueueClient 异常行为

标签 c# redis servicestack message-queue

我的基础设施:

  • Main - ServiceStack 自托管控制台应用程序。 “Main”向 MQ 发送消息。
  • 背景 - ServiceStack 自托管控制台应用程序。 “后台”接收来自 MQ 的消息。
  • 本地安装Redis

在“主”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 方法时,它似乎工作正常(没有抛出异常),但我的消息没有到达“后台”。

这样可以吗?

最佳答案

我找到了一个解决方案。在我的“背景”中,我希望收到类型为 TestMessage 的消息

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

但是当使用 MessageQueuePublisher.Publish 时,消息的类型为 object 并且进入了 object 队列并且没有被处理。

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

public void Publish<T>(T message)

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

关于c# - ServiceStack RedisMessageQueueClient 异常行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18512059/

相关文章:

c# - 如何在客户端项目中添加服务引用?

c# - 在 WPF 中使用 Linq 的正确方法

Redis 集群 : Is it possible to obtain one hash slot from different keys?

linux - 短读或 OOM 加载数据库。不可恢复的错误,现在中止

c# - 多个正则表达式检查相同的字符串,没有重叠的结果,同时忽略单词

c# - ASP.NET MVC5 自定义 AuthorizeAttribute 未被正确调用

redis - 导出redis位图上所有值为0的offset

service - 如何处理依赖于服务堆栈中的用户 session 的 Redis MQ 请求

servicestack - 自动引导 ID