appharbor - 使用 AppHarbor 和 CloudAMQP 在云端进行 MT

标签 appharbor masstransit 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"

}

谢谢,


编辑:感谢卡尔指出网址中的密码

最佳答案

编辑 :
为了让其他人考虑将 MassTransit 与 CloudAMQP 结合使用,您可能需要查看 EasyNetQ。不会从 MassTransit 中拿走任何东西,这是一个伟大的项目。将它与 CloudAMQP 之类的每月收取数据使用费的服务一起使用时,问题在于 MassTransit 使用轮询来检查消息,而不是订阅它们(至少在我使用的最后一个版本 2.1.1 中)。即使您可能没有发布消息,此轮询也会消耗您的数据使用量。

嗯,这实际上是可能的。

来一看,这都是appharbor后台worker配置的一部分。

一旦解决了这个问题,后台工作人员就开始保持“活着”并消费消息。问题围绕 app.config 与 myworker.exe.config 和配置转换。一旦我意识到这是一个配置问题,这个链接就派上用场了。 App.config transformation for appharbor background workers

您必须为 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);

关于appharbor - 使用 AppHarbor 和 CloudAMQP 在云端进行 MT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11420860/

相关文章:

mysql - 亚马逊网络服务 + ASP.NET MVC 3 + MySql

c# - 如何停止 MassTransit 为错误消息创建交换绑定(bind)

c# - 跨集群的 MassTransit 请求和响应

c# - 为 CQRS 实现包装 Masstransit 是一个好习惯吗?

django - RabbitMQ 保持连接运行很长时间

java - 连接被拒绝云 amqp

mysql - AppHarbor:通过 ASP.NET MVC 5 + Dapper 连接到 MySQL 数据库

c# - 如何使用 ServiceStack.net Web 服务在 AppHarbor 上配置 SSL

django - 使用 django、celery、cloudamqp 和 heroku 的 ssl

c# - AppHarbor MassTransit CloudAMQP 持续消耗 1,9kB/s