2012-11-10 25 views

回答

4

下面是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); 
} 

基本上是一个MessageQueueClientMessageProducer,但除了含有其他细粒度的方法来发布到获取关闭消息队列为以及发布和订阅任何MQ主题。

邮件客户端和生产者无论在类型Publish<T> API具有相同的行为。

+0

感谢您的解释@mythz。不知道这是值得的另一个SO问题,但IMessageProducer/IMessageFactory意味着要扩展到支持额外类型的出版商(例如像SignalR)?思考特定的SS消息处理程序将消息转发到其他消息传递系统,而处理程序不得不关心某些发布机制(例如连接性,IoC解析)。或者你推荐另一种方法? – James

+0

ServiceStack的IMessageService API旨在使他们IMPL无关,但他们意味着MQ代理喜欢的RabbitMQ/MSMQ或更新ServiceBus提供商。我不认为SignalR提供者会是一个完美契合,我只会将SignalR集成视为另一个“IDependency”,并让您的服务明确发布。 – mythz