使用rabbitmq过程中的小经验--消息分发器

写代码期间遇到一个问题,在我自己的服务里面,对一个送礼的消息需要进行多个业务操作,而且后期还要继续增加针对送礼事件的业务操作

我的第一反应直接接收送礼消息,然后在消息处理器中累加代码,但是考虑到服务的可维护性和热插拔性,这样只会在业务迭代的过程中累积下来过多的废旧代码,不利于代码的维护和后期开发,为了不给以后埋坑,思考许久,设计了一个小小的消息分发器,分享给大家

public interface SendGiftEventProcessor {

    void processSendGiftEvent(SendGiftEventevent);

    @Component
    class Dispatcher {

        private static final Logger LOGGER = LoggerFactory.getLogger(Dispatcher.class);

        @Autowired
        private List<SomeEventProcessor> processors;

        //消息触发
        @Event("SEND_GIFT")
        void onSomeEvent(SendGiftEvent event) {
            for (SomeEventProcessor processor : processors) {
                try {
                    processor.processSomeEvent(event);
                } catch (Exception e) {
                    LOGGER.error("process SomeEvent error.", e);
                }
            }
        }
    }
}


/**
 * @author HMAN
 * @createTime 2018/4/23
 * @description 排行榜-->送礼消息逻辑实现
 */
@Component
public class RankSendGiftEventProcessor implements SendGiftEventProcessor {

    @Override
    public void processSendGiftEvent(SendGiftEvent event) {

    }
}

/**
 * @author HMAN
 * @createTime 2018/4/23
 * @description 任务-->送礼消息逻辑实现
 */
@Component
public class TaskSendGiftEventProcessor implements SendGiftEventProcessor {

    @Override
    public void processSendGiftEvent(SendGiftEvent event) {

    }
}

设计思路: 定义一个接口SomeEventProcessor ,内部写一个内部类处理器Dispatcher ,用来接收并处理消息,在Dispatcher 内部使用spring的依赖注入,将所有实现SomeEventProcessor 接口的实现类注入到处理器中,每次处理器接收到这个mq事件之后,循环processors,并且调用processSomeEvent方法,即可实现消息的分发处理

如代码所示:成功将排行榜和任务两个同时针对送礼消息的消息处理器接藕,在日后维护中,若不需要维护排行榜或者任务,则直接删掉class即可

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,107评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,002评论 25 709
  • 刘润老师这场直播,分析未来5年的机会,听完觉得特别好。我把重点摘录下来,分享给大家。 要找到未来五年的机会,首先要...
    AllenRen阅读 347评论 0 1