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);
    }
}
相关推荐
galaxyffang3 天前
RocketMQ 为什么性能不如 Kafka?
分布式·kafka·rocketmq
一叶飘零_sweeeet3 天前
从 Kafka 到 RocketMQ:迁移实战全攻略
分布式·kafka·rocketmq
一叶飘零_sweeeet6 天前
Spring Cloud Alibaba RocketMQ 实战:从底层原理到微服务落地全攻略
微服务·架构·rocketmq
一叶飘零_sweeeet7 天前
RocketMQ 核心解密:NameServer 路由发现与负载均衡的底层逻辑全解析
负载均衡·rocketmq
无心水7 天前
【分布式利器:事务】5、本地消息表vs事务消息:异步方案怎么选?
分布式·rocketmq·分布式事务·saga·事务消息·分布式利器·2pc3pc
huisheng_qaq8 天前
【RocketMq源码篇-02】rocketmq集群搭建详细过程(docker版-2主2从)
docker·rocketmq·rocketmq集群·rocketmq源码·2主2从
无心水8 天前
【分布式利器:RocketMQ】RocketMQ基本原理详解:架构、流程与核心特性(附实战场景)
中间件·架构·rocketmq·topic·rocketmq基本原理·电商金融mq·nameserver
小虾米 ~9 天前
RocketMQ DefaultMQPushConsumer vs DefaultLitePullConsumer
java·rocketmq·java-rocketmq
2***574210 天前
后端消息中间件对比,RabbitMQ与RocketMQ
分布式·rabbitmq·rocketmq
无心水11 天前
【分布式利器:RocketMQ】2、RocketMQ消息重复?3种幂等方案,彻底解决重复消费(附代码实操)
网络·数据库·rocketmq·java面试·消息幂等·重复消费·分布式利器