一个消费者之内访问对象(Access objects within a Consumer)

2019-10-23 01:01发布

我的工作消耗使用消息的项目MassTransitRabbitMQC#

我建立一个原型而现在消费项目是一个控制台应用程序。 在Main program.cs课,我连接到总线和订阅从这样的出版商接受的消息:

var bus = BusInitializer.CreateBus("Subscriber", x =>
            {
                x.Subscribe(subs =>
                {
                    subs.Consumer<UpdatedInformation>().Permanent();
                });
            });

作为参考,这里的CreateBus()方法:

public static IServiceBus CreateBus(string queueName, Action<ServiceBusConfigurator> moreInitialization)
{
    var bus = ServiceBusFactory.New(x =>
    {
        x.UseRabbitMq();
        x.ReceiveFrom("rabbitmq://localhost/test" + queueName);
        moreInitialization(x);
    });

    return bus;
}

这里是消费类的一个示例:

class UpdatedInformationConsumer : Consumes<UpdatedInformation>.Context
{

    public void Consume(IConsumeContext<UpdatedInformation> message)
    {
        Console.Write("\nMessage: " + message.Message);
        Console.Write("\nPROCESSED: " + DateTime.Now.ToString());
    }
}

在主类的用户,我也初始化服务等配置。 我需要做的是能够访问我的消费类这些服务/对象,因为我不希望每个在消耗收到消息的时间来初始化新的。

这应该是比较容易的,但我很为难,因为我没有真正建立我的消费类的实例。

Answer 1:

而不是放了一堆单身的你服务,这导致了一堆静态方法等等,你可以指定一个消费者与工厂的订阅,通过这些依赖于你的消费者。 您也可以使用任何支持的容器(甚至是你自己)来解决这些依赖。

x.Subscribe<UpdatedInformationConsumer>(() => 
    new UpdatedInformationConsumer(dependency1, dependency2, etc));

消费者的新实例将为每个消息接收创建,所以对象的生命周期也可以用这种方式进行管理。



文章来源: Access objects within a Consumer