Joe*_*ung 4 masstransit appharbor cloudamqp
有没有人成功让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"
}
Run Code Online (Sandbox Code Playgroud)
谢谢,乔
编辑:感谢Carl指出网址中的密码
编辑:要让其他人考虑将MassTransit与CloudAMQP一起使用,您可能需要查看EasyNetQ.没有从MassTransit拿走任何东西,这是一个伟大的项目.使用像CloudAMQP这样每月收费数据的服务的问题是,MassTransit使用轮询来检查消息,而不是订阅它们(至少在我使用2.1.1的最后一个版本中).即使您可能没有发布消息,此轮询也会影响您的数据使用.
实际上它是可能的.
来发现,这是appharbor上后台工作者配置的全部内容.
一旦解决了问题,后台工作人员就开始"活着"并消费消息.问题围绕app.config vs myworker.exe.config和config转换.一旦我意识到这是一个配置问题,这个链接帮助了.适用于appharbor后台工作者的App.config转换
你必须换掉rabbitmq的amqp方案,但这并不坏.这是后台工作者的总线配置:
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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
832 次 |
| 最近记录: |