中间件需求概况
-
能够适配多种队列框架(如 RabbitMQ、Kafka等)。
-
支持通过 appsettings.json 文件配置。
-
支持手动强代码方式配置。
-
支持依赖注入和静态实例方式调用。
-
支持多个队列消息发布,即将消息写入到不同的队列中。
-
支持多个队列的消息消费,即能够订阅多个队列。
中间件核心设计
MessageProviderFactory(消息提供者工厂)
MessageProviderFactory 负责创建 MessageProvider(消息提供者),每个 MessageProvider 对应一个队列生产者和消费者,开发者在代码中可以自由的选择消息要通过 Provider 发给哪个队列。Factory 的核心代码如下:
IMessageProviderFactory.cs
1 2 3 4 5 6 7 8 9 10 11 12 |
|
MessageProviderFactory.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
|
MessageProvider (消息提供者)
消息提供者用于创建消息引擎(如 Rabbit、Kafka)和 启动、停止消息引擎,其核心代码如下:
IMessageProvider.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
DefaultMessageProvider.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
|
IMessageEngine (消息引擎)
消息引擎 负责将消息发送到相应的MQ中间件,并且维护一个单例的连接。
IMessageEngine.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
|
RabbitMessageEngine.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
|
IMessageSink (消息消费管道)
消息消费管道,负责真实消息的消费,每个 Provider 能够配置多个消息消费管道,每个管道应该被分配为处理不同的业务。如 SMMessageSink 应该负责短信通知业务,IMMessageSink 应该负责 IM 通知业务。
IMessageSink.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
Message (消息体)
Message 约定了推送到队列中消息内容的格式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
|
RabbitListenService (队列监听后台服务)
RabbitListenService 继承 IHostedService,负责维护队列的监听,实时对消息进行消费和分发。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 |
|
MessageEngineServiceCollectionExtensions (服务注入)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
|
通过配置文件配置
appsettings.json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
|
startup.cs
1 2 3 4 5 6 |
|
代码方式配置
startup.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
|
写在最后
由于篇幅问题,很多代码无法贴出,望笔友理解。更详细的源码请留言或@我。