zbus消息隊列應用實例

maven:

<!-- zubs -->
<dependency>
    <groupId>org.zbus</groupId>
    <artifactId>zbus</artifactId>
    <version>6.2.6</version>
</dependency>
生產者:

@Component
public class ZbusProducerHolder {

    private static org.slf4j.Logger Logger = LoggerFactory.getLogger(ZbusProducerHolder.class);
    @Value("${zbus.broker.address}")
    private String mqAddress;
    @Value("${zbus.broker.name}")
    private String brokerName;
    private Broker broker;
    private Producer producer;
    @PostConstruct
    public void init() {
        try {
            BrokerConfig config=new BrokerConfig();
            config.setServerAddress(mqAddress);
            broker=new SingleBroker(config);
            producer=new Producer(broker,brokerName);
            producer.createMQ();
        }catch (Exception e){

        }

    }

    /**
     * 發送
     */
    public void sendMsg(String datas) throws Exception{
        Message msg=new Message();
        msg.setBody(datas);
        producer.sendSync(msg);
    }
}
消費:

@Component
public class ZbusConsumer {
    private static org.slf4j.Logger Logger    = LoggerFactory.getLogger(ZbusConsumer.class);
    private static final Integer    CUP_COUNT = Runtime.getRuntime().availableProcessors() * 2;

    @Value("${zbus.broker.address}")
    private String                  mqAddress;
    private Broker                  broker;
    @Value("${zbus.broker.message.send.name}")
    private String                  messageSendBrokerName;
    @Value("${zbus.broker.user.info.name}")
    private String                  userInfoBrokerName;
    @Inject
    private MsgSendBiz              msgSendBiz;
    @Inject
    private UserInfoBiz             userInfoBiz;

    @PostConstruct
    public void init() {
        try {
            // 創建Broker代表
            BrokerConfig brokerConfig = new BrokerConfig();
            brokerConfig.setServerAddress(mqAddress);
            broker = new SingleBroker(brokerConfig);

            MqConfig config1 = new MqConfig();
            config1.setBroker(broker);
            config1.setMq(messageSendBrokerName);

            MqConfig config2 = new MqConfig();
            config2.setBroker(broker);
            config2.setMq(userInfoBrokerName);

            for (int i = 0; i < CUP_COUNT; i++) {
                final Consumer c1 = new Consumer(config1);
                c1.onMessage((msg, sess) -> msgSendBiz.sendTemplateMsg(msg.getBodyString()));
                c1.start();

                final Consumer c2 = new Consumer(config2);
                c2.onMessage((msg, sess) -> userInfoBiz.saveUserInfo(msg.getBodyString()));
                c2.start();
            }
        } catch (Exception e) {
            Logger.error("zbus消費隊列出錯:{}", e);
        }
    }

    @PreDestroy
    public void destroy() {
        try {
            broker.close();
            Logger.error("zbus消費隊列服務停止:{}", new Date());
        } catch (IOException e) {
            Logger.error("zbus消費隊列停止出錯:{}", e);
        }
    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章