19、非泛型发布&订阅扩展方法

自从EasyNetQ第一个版本开始,它就可以发布/订阅指定类型的消息。

bus.Subscribe<MyMessage>("subscriptionId",
        x => Console.WriteLine(x.Text));
bus.Publish<MyMessage>(theMessage);

但有时你在运行时才能知道消息的类型,编译时根本不知道该用啥类型参数,那该怎么发布和订阅呢。为此EasyNetQ提供了非泛型的发布和订阅方法。

要加上这个using语句:

using EasyNetQ.NonGeneric;

它将提供给你一些subscription扩展方法。(对IBus的扩展方法)

public static IDisposable Subscribe(
    this IBus bus, 
    Type messageType,                               //提供消息的类型
    string subscriptionId, 
    Action<object> onMessage)
    
public static IDisposable Subscribe(
    this IBus bus,
    Type messageType,
    string subscriptionId,
    Action<object> onMessage,
    Action<ISubscriptionConfiguration> configure)
    
public static IDisposable SubscribeAsync(    
    this IBus bus,    
    Type messageType,    
    string subscriptionId,    
    Func<object, Task> onMessage)
    
public static IDisposable SubscribeAsync(    
    this IBus bus,     
    Type messageType,     
    string subscriptionId,     
    Func<object, Task> onMessage,     
    Action<ISubscriptionConfiguration> configure)

 

还包括发布扩展方法:

 public static void Publish(
    this IBus bus, 
    Type messageType, 
    object message)
    
 public static void Publish(
    this IBus bus, 
    Type messageType, 
    object message, 
    string topic)
    
 public static Task PublishAsync(
    this IBus bus, 
    Type messageType, 
    object message)
    
 public static Task PublishAsync(
    this IBus bus, 
    Type messageType, 
    object message, 
    string topic)

 

它们用起来就像IBus上的Publish和Subscribe方法一样,除了需要提供一个Type参数,不再需要泛型的类型参数T,消息处理器用Action<object>替代了Action<T>。

 

var messageType = typeof(MyMessage);
bus.Subscribe(messageType, "my_subscriptionId", x =>    
    {        
        var message = (MyMessage)x;        
        Console.Out.WriteLine("Got Message: {0}", x.Text);    
    });

 

这里有一个例子,使用了非泛型的Publish。

var messageType = typeof(MyMessage);
bus.Publish(messageType, theMessage);

 

英文地址:https://github.com/EasyNetQ/EasyNetQ/wiki/Non-generic-publish-%26-subscription-extension-methods

posted on 2017-12-06 12:59  困兽斗  阅读(156)  评论(0编辑  收藏  举报

导航