【问题标题】:ServiceStack MessageFactory publishingServiceStack MessageFactory 发布
【发布时间】:2012-11-10 17:53:47
【问题描述】:

我一直在这里查看 ServiceStack Messaging with Redis 文档:

https://github.com/ServiceStack/ServiceStack/wiki/Messaging-and-redis

它似乎很好地解释了基础知识。我不太了解的是通过 MessageFactory 发布时的差异和适用用例:

.CreateMessageProducer.Publish()

.CreateMessageQueueClient.Publish()

我计划审查代码,但想在此处发布此代码以获得“官方”解释。

【问题讨论】:

    标签: redis messaging servicestack


    【解决方案1】:

    这里是IMessageProducerIMessageQueueClient的API:

    public interface IMessageProducer : IDisposable
    {
        void Publish<T>(T messageBody);
        void Publish<T>(IMessage<T> message);
    }
    
    public interface IMessageQueueClient : IMessageProducer
    {
        void Publish(string queueName, byte[] messageBytes);
        void Notify(string queueName, byte[] messageBytes);
        byte[] Get(string queueName, TimeSpan? timeOut);
        byte[] GetAsync(string queueName);
        string WaitForNotifyOnAny(params string[] channelNames);
    }
    

    基本上是一个MessageQueueClient 也是一个MessageProducer,但除了发布之外还包含其他细粒度方法以获取队列中的消息以及发布并订阅任何 MQ 主题。

    消息客户端和生产者上键入的Publish&lt;T&gt; API 具有相同的行为。

    【讨论】:

    • 感谢@mythz 的解释。不确定这是否值得另一个 SO 问题,但 IMessageProducer/IMessageFactory 是否意味着要扩展以支持其他类型的发布者(例如 SignalR)?考虑将消息转发到其他消息传递系统的特定 SS 消息处理程序,而处理程序不必关心某些发布机制(例如连接性、IoC 解析)。还是您为此推荐另一种方法?
    • ServiceStack 的 IMessageService API 设计为与 impl 无关,但它们适用于 MQ 代理,如 RabbitMQ/MSMQ 或更新的 ServiceBus 提供程序。我认为 SignalR 提供程序在这里并不完美,我只会将 SignalR 集成视为另一个 IDependency 并让您的服务明确发布到那里。
    猜你喜欢
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 2017-02-27
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    • 2014-11-04
    • 1970-01-01
    相关资源
    最近更新 更多