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
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的实例?这不是问题,请参阅我对问题的回答。