0
点赞
收藏
分享

微信扫一扫

通用接口开放平台设计与实现——(29)消息客户端之消息接收器

作为生产者角色的消息客户端,还需要接收来自业务系统的事件,然后将其转换为请求消息,发送给服务端。

这里有两种方案,方案1是业务系统与消息客户端独立部署,业务系统通过调用消息客户端暴露的rest服务来推送业务数据;方案2是消息客户端内置于业务系统中,业务系统直接调用消息客户端服务层的方法。

这里我们采用方案1,做一个控制器,对外接收rest请求,业务系统传入事件(必填)与单据标识(非必填,某些事件为全局,无标识的概念)。前面提过,我们约定将事件的编码与消息主题编码保持一致。

/**
 * 接收事件控制器
 * @author wqliu
 * @date 2022-1-18 16:14
 **/
@RestController
@RequestMapping("/event")
public class ReceiveEventController {
    //TODO:方便测试,暂时使用get请求,后续考虑调整为post
    @GetMapping
    public String receive(String event,String id){
        //数据验证
        if(StringUtils.isBlank(event)){
            throw new RuntimeException("事件不能为空");
        }
        //根据消息主题查找发送器
        try {
            RequestMessageSender messageSender = (RequestMessageSender) MessageSenderFactory.createSender(event);
            messageSender.sendMessage(id);
            return "ok";
        }catch (MessageException e){
            throw new RuntimeException(e.getMessage());
        }

    }
}

当我们模拟业务系统(生产者)请求地址http://localhost:10001/event?event=lms.transportbill.consignmentbill.create&id=1时,就会触发消息客户端向服务器端推送一条消息。

举报

相关推荐

0 条评论