Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ServiceStack RedisMessageQueueClient异常行为_C#_Redis_<img Src="//i.stack.imgur.com/WM7S8.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">servicestack_Message Queue - Fatal编程技术网 servicestack,message-queue,C#,Redis,servicestack,Message Queue" /> servicestack,message-queue,C#,Redis,servicestack,Message Queue" />

C# ServiceStack RedisMessageQueueClient异常行为

C# ServiceStack RedisMessageQueueClient异常行为,c#,redis,servicestack,message-queue,C#,Redis,servicestack,Message Queue,我的基础设施: 主-ServiceStack自托管控制台应用程序。“Main'将消息发送到MQ 后台-ServiceStack自托管控制台应用程序。““后台”从MQ接收消息 本地安装的Redis 在“主”AppHost中,我配置Redis manager: container.Register<IRedisClientsManager>( new PooledRedisClientManager("localhost:6379")); container.Registe

我的基础设施:

  • 主-ServiceStack自托管控制台应用程序。“Main'将消息发送到MQ
  • 后台-ServiceStack自托管控制台应用程序。““后台”从MQ接收消息
  • 本地安装的Redis
在“主”AppHost中,我配置Redis manager:

container.Register<IRedisClientsManager>(
    new PooledRedisClientManager("localhost:6379"));
container.Register(
新的PooledRedisClientManager(“本地主机:6379”);
然后我在服务中的某个地方运行此代码:

using (var client = new RedisMessageQueueClient(TryResolve<IRedisClientsManager>()))
{
    client.Publish(new TestMessage { Value = "From ping" });
}
使用(var client=new RedisMessageQueueClient(TryResolve()))
{
Publish(新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:IMessageQueuePublisher
{
公共无效发布(对象消息)
{
使用(var client=new RedisMessageQueueClient)(
EndpointHost.AppHost.TryResolve())
{
客户端。发布(消息);
}
}
} 
当我在执行前一段代码的地方调用MessageQueuePublisher.Publish方法时,它似乎工作正常(没有引发异常),但我的消息没有到达“后台”


这样行吗?

我找到了解决办法。在我的“背景”中,我希望消息类型为TestMessage

mqService.RegisterHandler<TestMessage>(ServiceController.ExecuteMessage);
mqService.RegisterHandler(ServiceController.ExecuteMessage);
但在使用MessageQueuePublisher.Publish时,消息的类型为object,并转到对象队列,因此未被处理

因此,要解决此问题,发布方法应该是通用的:

public void Publish<T>(T message)
公共作废发布(T消息)

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

您是否检查了第二个代码块中是否正在解析IRediclientsManager的实例?这不是问题,请参阅我对问题的回答。