java专题

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

2018-04-23  本文已影响10人  H_Man

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

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

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即可

上一篇下一篇

猜你喜欢

热点阅读