SpringCloudAlibaba:6.2RocketMQ的普通消息的使用

简介

普通消息也叫并发消息,是发送效率最高,使用最多的一种

依赖

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>java_sc_alibaba</artifactId>
        <groupId>jkw.life</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>test-rocketmq8009</artifactId>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <!-- rocketmq-->
        <dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-client</artifactId>
            <version>5.1.0</version>
        </dependency>
        <!-- SpringMVC-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- test-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

创建topic

复制代码
mqadmin updateTopic -n localhost:9876 -c DefaultCluster -t testtopic

测试类

复制代码
package send_message;

import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import org.apache.rocketmq.client.exception.MQBrokerException;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.remoting.exception.RemotingException;
import org.junit.Test;
import java.nio.charset.StandardCharsets;
import java.util.List;
@Slf4j
public class Test_01 {
    /**
     * 消息生成者【普通消息】
     * 创建topic:
     * mqadmin updateTopic -n localhost:9876 -c DefaultCluster -t testtopic
     */
    @Test
    public void producer() throws MQClientException, MQBrokerException, RemotingException, InterruptedException {
        //1.初始化生产者【生产者组名】
        DefaultMQProducer producer = new DefaultMQProducer("SyncProducer");
        //2.rocketmq地址
        producer.setNamesrvAddr("192.168.66.101:9876");
        //3.启动生产者
        producer.start();
        for (int i = 0; i < 10; i++) {
            //4.初始化消息对象【topic主题/标记过滤/消息体】
            Message message = new Message("testtopic", "Tags", (i + "_syncProducer").getBytes(StandardCharsets.UTF_8));
            //5.生产者发送消息
            SendResult send = producer.send(message);
            System.out.println(i + "消息发送成功:" + send);
        }
        //6.关闭生产者
        producer.shutdown();
    }
    /**
     * 消费者
     */
    @Test
    public void consumer() throws MQClientException, InterruptedException {
        //1.初始化消费者【消费者组名】
        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("SyncProducer");
        //2.rocketmq地址
        consumer.setNamesrvAddr("192.168.66.101:9876");
        //3.订阅主题
        consumer.subscribe("testtopic", "*");
        //4.监听消息
        consumer.setMessageListener(new MessageListenerConcurrently() {
            @Override
            public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list, ConsumeConcurrentlyContext consumeConcurrentlyContext) {
                for (MessageExt msg : list) {
                    System.out.println("消费成功" + msg);
                }
                return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;//消费成功
            }
        });
        //5.启动消费者
        consumer.start();
        //6.永远运行下去
        Thread.sleep(Long.MAX_VALUE);
    }
}
相关推荐
^辞安1 天前
RocketMQ为什么自研Nameserver而不用zookeeper?
分布式·zookeeper·rocketmq
tsxchen1 天前
Centos9安装rocketmq
rocketmq
百思可瑞教育1 天前
ActiveMQ、RocketMQ、RabbitMQ、Kafka 的全面对比分析
vue.js·分布式·rabbitmq·rocketmq·activemq·北京百思可瑞教育·百思可瑞教育
王嘉俊9254 天前
深入浅出 全面剖析消息队列(Kafka,RabbitMQ,RocketMQ 等)
分布式·kafka·消息队列·rabbitmq·rocketmq
友莘居士4 天前
长流程、复杂业务流程分布式事务管理实战
spring boot·rocketmq·saga·复杂流程分布式事务·长流程
缘来如此096 天前
Kafka&RocketMQ重平衡容灾机制
分布式·kafka·rocketmq
富士康质检员张全蛋7 天前
消息存储机制-索引文件及页缓存
rocketmq
鼠鼠我捏,要死了捏12 天前
Kafka、RabbitMQ 与 RocketMQ 在高并发场景下的高可用与性能对比分析
kafka·rabbitmq·rocketmq
yourkin66613 天前
RocketMQ 分布式事务方案
分布式·rocketmq
现在,此刻20 天前
面试题储备-MQ篇 2-说说你对RocketMQ的理解
java·rocketmq·java-rocketmq