对于请求处理,先入库,再发消息,没你想得这么简单
聊技术,不止于技术
微服务架构下,各个微服务间的通信方式是首先需要决定的事。微服务间的通信方式主要有REST、RPC和消息这三种。这三种通信方式各有优缺点,各有其适合的场景,关于它们的比较及分析今天就先不讲了。
今天主要讲的是基于消息的通信方式下,先入库在发送消息的问题。
基于消息的通信方式下,各个微服务间通过消息驱动来完成业务逻辑。一个典型的例子如下:
上例中,用户服务处理用户注册请求,先入库,然后发送用户注册事件,邮件服务监听用户注册事件,然后发送欢迎邮件。
那么就上述场景而言,对于用户服务,我们的业务代码该如何写呢?为什么我说先入库再发消息,没你想得这么简单呢?下面一起来看看。
1
先入库,再发消息,简单又直接的方式
简单又直接的入库发消息伪代码如下:
1. var content = processRequest(httpRequest);
2. var message = prepareMessage(httpRequest);
3. DB.insert(content);
4. Message.publish(message);