gpt4 book ai didi

redis - 未使用 Redis MQ 调用的第一个订阅者

转载 作者:IT王子 更新时间:2023-10-29 06:15:54 26 4
gpt4 key购买 nike

我正在使用来自 ServiceStack 可重用性用例项目的解决方案。

为此解决方案,我添加了一个新的控制台应用程序,其中包含以下代码。

对于原始的可重用性用例项目,当发布 EmailMessage 时,它​​由发送电子邮件的订阅者处理(即 SMessageService.Any(EmailMessage request)。

当我运行控制台应用程序时,这意味着我有两个订阅 EmailMessage 的应用程序,只有新的控制台应用程序收到消息。

我有以下内容:

我的控制台应用程序是:

class Program
{
static void Main(string[] args)
{
var subscriberHost = new SubscriberHost();
subscriberHost.Init();

Console.WriteLine("Waiting of publishing
to happen on EmailMessage as we are subscribing to it...");
Console.ReadLine();
}
}

public class SubscriberHost : AppHostHttpListenerBase
{
private RedisMqServer mqHost;

public SubscriberHost()
:base("Subscriber console",typeof(EmailMessageEventHandler).Assembly)
{

}


public override void Configure(Container container)
{
var redisFactory = new PooledRedisClientManager("localhost:6379");
mqHost = new RedisMqServer(redisFactory, retryCount:2);

mqHost.RegisterHandler<EmailMessage>((message) =>
{
var emailMessage = message.GetBody();
Console.WriteLine(emailMessage.To);
Console.WriteLine(emailMessage.Subject);
Console.WriteLine(emailMessage.Body);
return new SMessageReceipt {
Type = "not used",
To = "test",
From = "Reusability",
RefId = "1,"
};
});
// mqHost.RegisterHandler<EmailMessage>(ServiceController.ExecuteMessage);
mqHost.Start();
}
}

我原以为两个订阅者都能收到 EmailMessage,但只有新的控制台应用程序收到了它。为什么其他订阅者没有收到消息?

执行发布的客户端代码没有被修改。

最佳答案

我在上面展示的是使用 Redis MQ,对于我测试的多订阅者问题,我需要 Redis Pub/Sub。

对于 MQ,订阅者从队列中取出消息进行处理。一旦处理完毕,就是这样。

对于 Pub/Sub,可能有很多订阅者,每个订阅者都会收到消息的副本。

我希望这对其他人有帮助。

关于redis - 未使用 Redis MQ 调用的第一个订阅者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13862440/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com