RabbitMQ


  RabbitMQ 是目前非常热门的一款消息中间件,不管是互联网大厂还是中小企业都在大量使用。Fireasy 提供了 RabbitMQ 对 订阅管理器 的实现。


  修改配置文件如下:

  • .Net Framework 下的 app.config 或 web.config 文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <sectionGroup name="fireasy">
      <section name="subscribers" type="Fireasy.Common.Subscribes.Configuration.SubscribeConfigurationSectionHandler, Fireasy.Common" />
    </sectionGroup>
  </configSections>
  <fireasy>
    <subscribers default="rabbitmq">
      <subscriber name="rabbitmq" type="Fireasy.RabbitMQ.SubscribeManager, Fireasy.RabbitMQ">
        <config 
          userName="guest"
          password="123"
          server="amqp://127.0.0.1:5672"
          exchangeType="topic"
          virtualHost="sample" />
      </subscriber>
    </subscribers>
  </fireasy>
</configuration>
  • .Net Core 下的 appsettings.json 文件
{
  "fireasy": {
    "subscribers": {
      "default": "rabbitmq",
      "settings": {
        "rabbitmq": {
          "type": "Fireasy.RabbitMQ.SubscribeManager, Fireasy.RabbitMQ",
          "config": {
            "userName": "guest",
            "password": "123",
            "server": "amqp://127.0.0.1:5672",
            "exchangeType": "topic",
            "virtualHost": "sample"
          }
        }
      }
    }
  }
}

  参数的说明如下:

  • userName 用户名。
  • password 密码。
  • exchangeType 交换器类型,取值为 topic、fanout 或 direct,默认为空。当取值为 topic 时表示一个消息只会被消费端所消费。
  • virtualHost 虚拟主机名称。
  • retryDelayTime 发布或订阅时重试的延迟时间。
  • retryTimes 发布或订阅失败后可以重试的次数。
  • serializerType 指定 ITextSerializer 类型(非必要)。

  在 .Net Core 应用中可以使用扩展方法 AddRabbitMQSubscriber 切换到 RabbitMQ 发布订阅,如下所示:

namespace demo
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddFireasy().AddRabbitMQSubscriber(s => 
            {
                s.UserName = "guest";
                s.Password = "123";
                s.Server = "amqp://127.0.0.1:5672";
            });
        }
    }
}

  使用 AddRabbitMQSubscriber 方法,可以不再使用外部配置文件,而通过 RabbitOptions 参数来设置以上的各种参数。当然,如果你要继续使用配置文件的话,也可以通过 ConfigName 属性指定配置文件中的配置项。如下所示:

namespace demo
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddFireasy().AddRabbitMQSubscriber(s => 
            {
                s.ConfigName = "rabbitmq"; //对应配置文件中的配置项
            });
        }
    }
}