使用Rebus,是否可以在应用程序中配置多个传输?
我们的业务领域是图像处理,由于处理的图像可能很大,我想使用InMemory传输在一个服务(WebApi 2)内进行通信以标记化(Guid)并将图像保留为处理成数据库。
此外,在图像被标记化后,我们希望使用RabbitMQ传输将图像发送到ImageProcessingService(控制台应用程序 - 使用TopShelf),并在处理完成后回复调用应用程序(WebApi)
我似乎无法找到正确的方法来处理我希望使用InMemory传输在应用程序(WebApi)中使用消息传递的场景,并且还让WebApi能够通过RabbitMQ传输发送到ImageProcessingService。
答案 0 :(得分:1)
显然我不知道你问题的细节,但你是否考虑将图像数据保存在其他地方(网络共享,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和内存传输来处理配置的端点。
它可以简单地包装任何数量的传输,然后您需要使用协议进行限定,这可能是您认为合适的任何内容。
这种解决方式虽然引发了一系列问题,但引入起来并不那么简单。