访问 Consumer 中的对象
Access objects within a Consumer
我正在开发一个项目,该项目使用 MassTransit
和 RabbitMQ
在 C#
中使用消息
我正在构建一个原型,现在消费者项目是一个控制台应用程序。在 Main program.cs
class 中,我连接到总线并订阅以接受来自发布者的消息,如下所示:
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;
}
这是其中一位消费者的示例 classes:
class UpdatedInformationConsumer : Consumes<UpdatedInformation>.Context
{
public void Consume(IConsumeContext<UpdatedInformation> message)
{
Console.Write("\nMessage: " + message.Message);
Console.Write("\nPROCESSED: " + DateTime.Now.ToString());
}
}
在订阅者的主class中,我还初始化了服务等配置。我需要做的是能够在我的消费者 classes 中访问那些 services/objects,因为我不想每次在消费中收到消息时都初始化新的。
这应该相对容易,但我很困惑,因为我实际上并没有创建我的消费者 classes 的实例。
与其在您的服务中放置一堆单例,这会导致一堆静态方法等,您可以在您的订阅中指定一个消费者工厂,将这些依赖项传递给您的消费者。您还可以使用任何受支持的容器(甚至您自己的容器)来解决这些依赖关系。
x.Subscribe<UpdatedInformationConsumer>(() =>
new UpdatedInformationConsumer(dependency1, dependency2, etc));
每次接收消息都会创建一个新的消费者实例,因此对象生命周期也可以通过这种方式进行管理。
我正在开发一个项目,该项目使用 MassTransit
和 RabbitMQ
在 C#
我正在构建一个原型,现在消费者项目是一个控制台应用程序。在 Main program.cs
class 中,我连接到总线并订阅以接受来自发布者的消息,如下所示:
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;
}
这是其中一位消费者的示例 classes:
class UpdatedInformationConsumer : Consumes<UpdatedInformation>.Context
{
public void Consume(IConsumeContext<UpdatedInformation> message)
{
Console.Write("\nMessage: " + message.Message);
Console.Write("\nPROCESSED: " + DateTime.Now.ToString());
}
}
在订阅者的主class中,我还初始化了服务等配置。我需要做的是能够在我的消费者 classes 中访问那些 services/objects,因为我不想每次在消费中收到消息时都初始化新的。
这应该相对容易,但我很困惑,因为我实际上并没有创建我的消费者 classes 的实例。
与其在您的服务中放置一堆单例,这会导致一堆静态方法等,您可以在您的订阅中指定一个消费者工厂,将这些依赖项传递给您的消费者。您还可以使用任何受支持的容器(甚至您自己的容器)来解决这些依赖关系。
x.Subscribe<UpdatedInformationConsumer>(() =>
new UpdatedInformationConsumer(dependency1, dependency2, etc));
每次接收消息都会创建一个新的消费者实例,因此对象生命周期也可以通过这种方式进行管理。