You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

rabbitmq.md 2.8 KiB

3 years ago
4 years ago
3 years ago
4 years ago
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. # RabbitMQ
  2. RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ 服务器是用 Erlang 语言编写的,而聚类和故障转移是构建在开源的通讯平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。
  3. CAP 支持使用 RabbitMQ 作为消息传输器。
  4. ## 配置
  5. 要使用 RabbitMQ 作为消息传输器,你需要从 NuGet 安装以下扩展包:
  6. ```shell
  7. Install-Package DotNetCore.CAP.RabbitMQ
  8. ```
  9. 然后,你可以在 `Startup.cs` 的 `ConfigureServices` 方法中添加基于 RabbitMQ 的配置项。
  10. ```csharp
  11. public void ConfigureServices(IServiceCollection services)
  12. {
  13. // ...
  14. services.AddCap(x =>
  15. {
  16. x.UseRabbitMQ(opt=>
  17. {
  18. //RabbitMQOptions
  19. });
  20. // x.UseXXX ...
  21. });
  22. }
  23. ```
  24. #### RabbitMQ Options
  25. CAP 直接对外提供的 RabbitMQ 配置参数如下:
  26. NAME | DESCRIPTION | TYPE | DEFAULT
  27. :---|:---|---|:---
  28. HostName | 宿主地址 | string | localhost
  29. UserName | 用户名 | string | guest
  30. Password | 密码 | string | guest
  31. VirtualHost | 虚拟主机 | string | /
  32. Port | 端口号 | int | -1
  33. ExchangeName | CAP默认Exchange名称 | string | cap.default.topic
  34. QueueArguments | 创建队列额外参数 x-arguments | QueueArgumentsOptions | N/A
  35. ConnectionFactoryOptions | RabbitMQClient原生参数 | ConnectionFactory | N/A
  36. CustomHeaders | 订阅者自定义头信息 | Func<BasicDeliverEventArgs, List<KeyValuePair<string, string>>> | N/A
  37. #### ConnectionFactory Options
  38. 如果你需要 **更多** 原生 `ConnectionFactory` 相关的配置项,可以通过 `ConnectionFactoryOptions` 配置项进行设定:
  39. ```csharp
  40. services.AddCap(x =>
  41. {
  42. x.UseRabbitMQ(o =>
  43. {
  44. o.HostName = "localhost";
  45. o.ConnectionFactoryOptions = opt => {
  46. //rabbitmq client ConnectionFactory config
  47. };
  48. });
  49. });
  50. ```
  51. #### CustomHeaders Options
  52. 当需要从异构系统或者直接接收从RabbitMQ 控制台发送的消息时,由于 CAP 需要定义额外的头信息才能正常订阅,所以此时会出现异常。通过提供此参数来进行自定义头信息的设置来使订阅者正常工作。
  53. 你可以在这里找到有关 [头信息](../cap/messaging#异构系统集成) 的说明。
  54. 用法如下:
  55. ```cs
  56. x.UseRabbitMQ(aa =>
  57. {
  58. aa.CustomHeaders = e => new List<KeyValuePair<string, string>>
  59. {
  60. new KeyValuePair<string, string>(Headers.MessageId, SnowflakeId.Default().NextId().ToString()),
  61. new KeyValuePair<string, string>(Headers.MessageName, e.RoutingKey),
  62. };
  63. });
  64. ```
  65. #### 如何连接 RabbitMQ 集群?
  66. 使用逗号分隔连接字符串即可,如下:
  67. ```
  68. x=> x.UseRabbitMQ("localhost:5672,localhost:5673,localhost:5674")
  69. ```