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";
    }
}

发布了47 篇原创文章 · 获赞 30 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_42083036/article/details/103706059