Design patterns 处理微服务请求的设计模式
我有一个基于微服务的应用程序。我有一个接收HTTP请求的代理/网关API。然后我还有两个服务服务A和服务B。当代理API收到消息时,它使用RabbitMQ将其发送到服务。然后在每一种情况下,我都应该根据消息的不同来处理和处理它(执行不同的操作) 这是我当前处理消息的方式: 服务A 如果我的消息类型不超过5-10种,那么使用switch语句是有意义的。但在我的应用程序中,我有30个。写这么大的条件语句既难看又不好维护。我正在寻找一种设计模式,它将从应用程序中消除这个问题。你有什么想法吗?您对状态模式有何看法?您可以尝试该体系结构 在CQRS中,每个命令只有一个处理程序;作为组件,您需要有一个Design patterns 处理微服务请求的设计模式,design-patterns,asp.net-core,rabbitmq,microservices,Design Patterns,Asp.net Core,Rabbitmq,Microservices,我有一个基于微服务的应用程序。我有一个接收HTTP请求的代理/网关API。然后我还有两个服务服务A和服务B。当代理API收到消息时,它使用RabbitMQ将其发送到服务。然后在每一种情况下,我都应该根据消息的不同来处理和处理它(执行不同的操作) 这是我当前处理消息的方式: 服务A 如果我的消息类型不超过5-10种,那么使用switch语句是有意义的。但在我的应用程序中,我有30个。写这么大的条件语句既难看又不好维护。我正在寻找一种设计模式,它将从应用程序中消除这个问题。你有什么想法吗?您对状态模
CommandDispatcher
,它使用CommandSubscriber
将每个命令分派给正确的处理程序。执行每个命令后,生成一个或多个事件;每个事件也被分派到一个或多个事件处理程序
如果每条消息都有相同的类,message
,那么您的CommandSubscriber
应该基于message.EventCode
注册命令处理程序。如果每条消息都有不同的类(即消息
是接口
),则命令订户
应根据消息类注册命令处理程序。此体系结构样式尊重打开-关闭原则,而基于交换机的样式则不尊重。您可以尝试此体系结构
在CQRS中,每个命令只有一个处理程序;作为组件,您需要有一个CommandDispatcher
,它使用CommandSubscriber
将每个命令分派给正确的处理程序。执行每个命令后,生成一个或多个事件;每个事件也被分派到一个或多个事件处理程序
如果每条消息都有相同的类,message
,那么您的CommandSubscriber
应该基于message.EventCode
注册命令处理程序。如果每条消息都有不同的类(即消息
是接口
),则命令订户
应根据消息类注册命令处理程序。此体系结构样式尊重打开-关闭原则
,而基于交换机的样式则不尊重。它是“网关路由模式”
当收到请求时,API网关会参考路由映射,该路由映射指定将请求路由到哪个服务。例如,路由映射可以将HTTP方法和路径映射到服务的HTTP URL。此功能与NGINX等web服务器提供的反向代理功能相同
[1] 它是“网关路由模式”
当收到请求时,API网关会参考路由映射,该路由映射指定将请求路由到哪个服务。例如,路由映射可以将HTTP方法和路径映射到服务的HTTP URL。此功能与NGINX等web服务器提供的反向代理功能相同
[1]
public string ProcessAsync(Message message)
{
switch (message.EventCode)
{
case "context 1":
return action1();
case "context 2":
return action2();
case "context 3":
return action3();
case "context 4":
return action4();
case "context 5":
return action5();
default:
throw new Exception("Unknown message event code!");
}
}