RabbitMQ集成系统文章02---webForm发布 ABP VNext订阅

一、webForm项目中发布

1、引用RabbitMQ.Client

 

 2、在你想要发布的地方调用如下的方法

  public void PublishRabbitMQ()
        {
           
            var data = new { ProductId = Guid.NewGuid(), NewCount = 10};
            try
            {
                var factory = new RabbitMQ.Client.ConnectionFactory();
                factory.HostName = "xxx.xxx.xxx.xxx";
                factory.UserName = "root";
                factory.Password = "123456";
                factory.Port = 5672;

                factory.VirtualHost = "/";
                using (var connection = factory.CreateConnection())
                {
                    using (IModel channel = connection.CreateModel())
                    {
                        channel.QueueDeclare(Convert.ToString("master-queue"), true, false, false, null);
                        IBasicProperties properties = channel.CreateBasicProperties();
                        properties.Persistent = true;
                        properties.DeliveryMode = 2;
                        properties.Expiration = "172800000";//48小时过期

                        string da = Newtonsoft.Json.JsonConvert.SerializeObject(data).Replace("\r\n", "");
                       

                        channel.BasicPublish(
                            exchange: "xxxUpdate",
                            routingKey: Convert.ToString("xxx.Product.StockChange"),
                            mandatory: true,
                            basicProperties: properties,
                            body: Encoding.UTF8.GetBytes(da));
                    }
                }
               
            }
            catch (Exception ex)
            {
               
            }
           
            
        }

 

二、ABP Vnext项目中订阅

1、appsettings.json文件中配置,注意此处的ExchangeName要与webForm项目中的相同

  "RabbitMQ": {
    "Connections": {
      "Default": {
        "HostName": "xxx.xxx.xxx.xxx",
        "Port": "5672",
        "UserName": "root",
        "Password": "123456",
        "VirtualHost": "/"
      }
    },
    "EventBus": {
      "ClientName": "xxxUpdate_baseInfoService",
      "ExchangeName": "xxxUpdate"
    }
  }

2、在调用的项目中引用Nuget包  

 

3、在项目中依赖模块   [DependsOn(typeof(AbpEventBusRabbitMqModule))]

 

4、订阅事件

 

 

 

    [EventName("xxx.Product.StockChange")]
    public class StockCountChangedEto
    {
        public Guid ProductId { get; set; }
        public int NewCount { get; set; }
    }
 public class MyHandler
        : IDistributedEventHandler<StockCountChangedEto>,
          ITransientDependency
    {
        public async Task HandleEventAsync(StockCountChangedEto eventData)
        {
            var productId = eventData.ProductId;
        }
    }

 

posted @ 2022-03-17 15:54  爱生活,爱代码  阅读(190)  评论(0编辑  收藏  举报