使用Rebus,是否可以在应用程序中配置多个传输?
我们的业务领域是图像处理,由于正在处理的图像可能很大,我想在一个服务(WebApi 2)内使用InMemory传输进行通信,以标记(Guid)并将待处理的图像持久化到数据库中。
此外,在图像被标记化之后,我们希望使用RabbitMQ传输将图像发送到ImageProcessingService(控制台应用程序-使用TopShelf)进行处理,并在处理完成后回复调用应用程序(WebApi)。
我似乎无法找出正确的方法来处理场景,我想使用InMemory传输在应用程序(WebApi)内使用消息传递,也有WebApi能够通过RabbitMQ传输发送到ImageProcessingService。
显然我不知道你的问题的细节,但你是否考虑将图像数据保存在其他地方(网络共享,MongoDB GridFS, SQL Server LOB等)?
根据我的经验,如果您只使用消息进行协调,而不使用消息来传输实际的大量数据,那么一切都变得更容易处理。
PS:我在某个时候尝试过多式联运,它可以让你做这样的事情:
Configure.With(...)
.Transport(c => c.Multi()
.Add("amqp", t => t.UseRabbitMq(connStr, "rabbitqueue")
.Add("inmem", t => t.UseInMemoryTransport(network, "inmemqueue"))
.Start();
,然后在amqp://rabbitqueue
和inmem://inmemqueue
的表单上指定地址,分别通过RabbitMQ和in-mem传输对配置的端点进行寻址。
它将简单地包装任意数量的传输,然后您需要用协议进行限定,协议可以是您认为合适的任何内容。
这种称呼方式引起了一堆问题,所以介绍起来并不那么简单。