2012-11-10 70 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