有人成功地让MassTransit与AppHarbor和CloudAMQP一起工作了吗?
我正在与它一起度过一段艰难的时光。
我让发布者(网站)发送消息,但服务器(后台工作人员)似乎没有接收到它们。
我关心的一件事是,MT需要rabbitmq方案,而CloudAMQP将方案设置为amqp。
在配置总线时,我正在交换方案(从amqp到rabbitmq),并注意到消息地址中的方案是rabbitmq,这是有意义的,因为我替换了它们。但我想知道,如果他们必须是amqp的服务器来提取他们?
这是我发送的一条简单消息,它到达了RabbitMQ,但服务器没有接收到它。
message_id: 08cf2cbc-5b4f-14dd-1231-381f8b520000
delivery_mode: 2
headers:
Content-Type: application/vnd.masstransit+json
Payload
614 bytes
Encoding: string
{
"destinationAddress": "rabbitmq://98eabe2a-aae8-464c-8555-855518dd87d0_apphb.com:*********@lemur.cloudamqp.com/98eabe2a-aae8-464c-8555-855518dd87d0_apphb.com/Messages.Product:ProductCreatedEvent",
"headers": {},
"message": {
"id": "dd6ecfaa-60d2-4cd4-8cd6-a08a00e872fb"
},
"messageType": [
"urn:message:Messages.Product:ProductCreatedEvent"
],
"retryCount": 0,
"sourceAddress": "rabbitmq://98eabe2a-aae8-464c-8555-855518dd87d0_apphb.com:**********@lemur.cloudamqp.com/98eabe2a-aae8-464c-8555-855518dd87d0_apphb.com/enterprise_web"
}谢谢,乔
编辑:谢谢卡尔指出了url中的密码。
发布于 2012-07-12 01:10:11
编辑:如果想让其他人考虑在CloudAMQP中使用MassTransit,您可能需要研究一下EasyNetQ。不会从MassTransit中得到任何东西,这是一个伟大的项目。当它与CloudAMQP这样的按月收取数据使用量的服务一起使用时,问题是MassTransit使用轮询来检查消息,而不是订阅它们(至少在我使用的上一个版本中是2.1.1)。即使您可能没有发布消息,此轮询也会占用您的数据使用量。
事实上,这是可能的。
来找出,这都是appharbor上后台工作程序配置的一部分。
一旦解决了这一点,后台工作人员就开始“活着”并消费消息。这个问题围绕着app.config与myworker.exe.config和配置转换。一旦我意识到这是一个配置问题,这个链接就帮了我的忙。App.config transformation for appharbor background workers
您必须将amqp方案替换为rabbitmq,但这并不是很糟糕。下面是我对后台工作进程的总线配置:
log.Info("Configuring MassTransit");
var rabbitUrl = ConfigurationManager.AppSettings["CLOUDAMQP_URL"];
var bus = ServiceBusFactory.New(sbc =>
{
// configure for log4net
sbc.UseLog4Net();
// configure the bus
sbc.UseRabbitMq();
sbc.UseRabbitMqRouting();
sbc.ReceiveFrom(String.Format("{0}/server", rabbitUrl.Replace("amqp://", "rabbitmq://"))); // need to swap the scheme for masstransit
// finds all the consumers in the container and register them with the bus
sbc.Subscribe(x => x.LoadFrom(container));
sbc.BeforeConsumingMessage(() =>
{
var session = container.GetInstance<ISessionFactory>().OpenSession();
CurrentSessionContext.Bind(session);
});
sbc.AfterConsumingMessage(() =>
{
var sessionFactory = container.GetInstance<ISessionFactory>();
if (CurrentSessionContext.HasBind(sessionFactory) == false) return;
var session = CurrentSessionContext.Unbind(sessionFactory);
if (session != null)
{
session.Dispose();
}
});
var results = sbc.Validate();
if (results.Any())
{
throw new Exception("MassTransit may not be setup correctly. Review validate results");
}
});
// finally inject the bus into the container
container.Inject(bus);发布于 2012-07-11 07:53:03
我不知道邮件里有谁这么做过。不过祝你好运,如果你让它工作了,请向mailing list报告。
MT使用rabbitmq协议来确定要使用的传输协议。
根据RabbitMQ connector的.NET文档,它应该使用amqp协议。所以这不应该是问题所在;但是您可以从其他地方连接到该实例吗?
https://stackoverflow.com/questions/11420860
复制相似问题