springboot快速啓動(十五)——快速整合rocketmq

rocketmq消息隊列整合boot框架

一、步驟

1、啓動rocketmq namesrv + broker

具體安裝與啓動可以參考上一篇博客:https://blog.csdn.net/weixin_42083036/article/details/103694840

2、導入依賴

 <!-- RocketMq客戶端相關依賴 -->
        <dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-client</artifactId>
            <version>4.6.0</version>
        </dependency>

注意:你安裝的rocketmq 的版本是多少 pom對應的版本號就應該是多少

3、配置文件

# 消費者的組名
apache.rocketmq.consumer.PushConsumer=PayConsumer
# 生產者的組名
apache.rocketmq.producer.producerGroup=PayProducer
# NameServer地址
#集羣地址
#apache.rocketmq.namesrvAddr=47.97.188.94:9876;47.97.188.95:9876;47.97.188.96:9876
apache.rocketmq.namesrvAddr=127.0.0.1:9876

配置類

public class JmsConfig {

    /**
     * NameServer 地址
     */
    public final static String NAME_SERVER = "47.97.188.93:9876";

    /**
     * topic
     */
    public static  final String TOPIC = "xdclass_pay_test_topic2";



}

消息生成者

@Component
public class PayProducer {
    /**
     * 生產者的組名
     */
    private String producerGroup="PayProducer";



    private DefaultMQProducer producer;

    /**
     * 構造方法初始化
     * 注:構造方法先於變量初始化所以全局變量賦值無法注入
     * 類似 @Value是無法注入到構造方法參數裏面的
     */
    public PayProducer(){
        producer = new DefaultMQProducer(producerGroup);
        producer.setNamesrvAddr(JmsConfig.NAME_SERVER);
        start();
    }

    public DefaultMQProducer getProducer(){
        return this.producer;
    }

    /**
     * 一般應用在上下文,使用上下文監聽
     */
    public void shutdowm(){
        this.producer.shutdown();
    }

    /**
     * Producer對象在使用之前必須要調用start初始化,初始化一次即可
     * 注意:切記不可以在每次發送消息時,都調用start方法
     */
    public void start(){
        try {
            this.producer.start();
        } catch (MQClientException e) {
            e.printStackTrace();
        }
    }

    public SendResult send(String topic,String tag,String text) throws InterruptedException, RemotingException, MQClientException, MQBrokerException {
        Message message = new Message(topic,tag,text.getBytes());
        SendResult sendResult = producer.send(message);
        shutdowm();
        return sendResult;
    }

    public SendResult sendMessage(Message message) throws InterruptedException, RemotingException, MQClientException, MQBrokerException {
        SendResult sendResult = producer.send(message);
        shutdowm();
        return sendResult;
    }

}

消息消費者

@Component
public class Consumer {

    /**
     * 消費者的組名
     */
    private String consumerGroup="PayConsumer";

    private DefaultMQPushConsumer consumer;

    public  Consumer() throws MQClientException {
        consumer = new DefaultMQPushConsumer(consumerGroup);
        consumer.setNamesrvAddr(JmsConfig.NAME_SERVER);
        consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET);

        consumer.subscribe(JmsConfig.TOPIC, "*");
        consumer.registerMessageListener((MessageListenerConcurrently) (msgs, context) -> {
            try {
                Message msg = msgs.get(0);
                System.out.printf("%s Receive New Messages: %s %n", Thread.currentThread().getName(), new String(msgs.get(0).getBody()));
                String topic = msg.getTopic();
                String body = new String(msg.getBody(), "utf-8");
                String tags = msg.getTags();
                String keys = msg.getKeys();
                System.out.println("topic=" + topic + ", tags=" + tags + ", keys=" + keys + ", msg=" + body);
                return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
                return ConsumeConcurrentlyStatus.RECONSUME_LATER;
            }
        });
        consumer.start();
        System.out.println("consumer start ...");
    }
}

測試類

@RestController
@RequestMapping("/")
public class TestSendMsg {

    @Autowired
    private PayProducer payProducer;


    @RequestMapping("send")
    public String send(String text) throws InterruptedException, RemotingException, MQClientException, MQBrokerException {
        Message message = new Message(JmsConfig.TOPIC,"taga", ("hello xdclass rocketmq = "+text).getBytes() );
        //SendResult sendResult = payProducer.sendMessage(message);
        SendResult sendResult = payProducer.getProducer().send(message);
        System.out.println(sendResult);
        return "success";
    }
}

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