From 82f7ba91a86d636b98154f78da3ded3384594b83 Mon Sep 17 00:00:00 2001 From: Kaxiya <125204531+kaxiya1021@users.noreply.github.com> Date: Mon, 27 May 2024 11:45:23 +0800 Subject: [PATCH 01/10] Add Docker Compose deployment method to QuickStart guide for Version 5.x --- .../03quickstartWithDockercompose5.x.md | 275 ++++++++++++++++++ 1 file changed, 275 insertions(+) create mode 100644 versioned_docs/version-5.0/02-quickStart/03quickstartWithDockercompose5.x.md diff --git a/versioned_docs/version-5.0/02-quickStart/03quickstartWithDockercompose5.x.md b/versioned_docs/version-5.0/02-quickStart/03quickstartWithDockercompose5.x.md new file mode 100644 index 0000000000..1b21d25809 --- /dev/null +++ b/versioned_docs/version-5.0/02-quickStart/03quickstartWithDockercompose5.x.md @@ -0,0 +1,275 @@ +# Docker-compose 部署 RocketMQ 5.X + +这一节介绍如何使用Docker-compose快速部署一个单节点单副本 RocketMQ 服务,并完成简单的消息收发。 + +:::tip 系统要求 + +1. 64位操作系统,推荐 Linux/Unix/macOS +2. 64位 JDK 1.8+ + +::: + +## 1.创建映射目录 + +```shell +# 创建映射目录 +mkdir -p /docker/rocketmq/broker/logs +mkdir -p /docker/rocketmq/broker/store +mkdir -p /docker/rocketmq/nameserver/logs +mkdir -p /docker/rocketmq/proxy/logs +mkdir -p /docker/rocketmq/conf + +# 给予权限 +chmod -R 777 /docker/rocketmq +``` +## 2.创建配置文件 +```shell +# 创建配置文件broker.conf +vim /docker/rocketmq/conf/broker.conf +``` +```text +# 集群名称 +brokerClusterName = DefaultCluster +# 节点名称 +brokerName = broker-a +# broker ID,0 表示 master,其他正整数表示 slave,不能小于 0 +brokerId = 0 +# 每天删除超过文件保留时间的 commit log 的时间,默认值为 04 +deleteWhen = 04 +# 文件保留时间,以小时计算,默认值为 72 小时 +fileReservedTime = 48 +# Broker 角色 +brokerRole = ASYNC_MASTER +# 刷盘方式 +flushDiskType = ASYNC_FLUSH +``` + +```shell +# 创建配置文件rmq-proxy.json +vim /docker/rocketmq/conf/rmq-proxy.json +``` + +``` +{ + "rocketMQClusterName": "DefaultCluster" +} +``` + + + +## 3.编写docker-compose + +为了快速启动并运行 RockerMQ 集群,您可以使用以下模板通过修改或添加环境部分中的配置来创建 docker-compose.yml 文件。 +```text +version: '3.8' + +services: + namesrv: + image: apache/rocketmq:5.2.0 + container_name: rmqnamesrv + ports: + - 9876:9876 + volumes: + - /docker/rocketmq/nameserver/logs:/home/rocketmq/logs + networks: + - rocketmq + command: sh mqnamesrv + + broker: + image: apache/rocketmq:5.2.0 + container_name: rmqbroker + ports: + - 10909:10909 + - 10911:10911 + - 10912:10912 + environment: + - NAMESRV_ADDR=rmqnamesrv:9876 + volumes: + - /docker/rocketmq/broker/logs:/home/rocketmq/logs + - /docker/rocketmq/broker/store:/home/rocketmq/store + - /docker/rocketmq/conf:/home/rocketmq/conf + depends_on: + - namesrv + networks: + - rocketmq + command: sh mqbroker -c /home/rocketmq/conf/broker.conf + + #Service for proxy + proxy: + image: apache/rocketmq:5.2.0 + container_name: rmqproxy + networks: + - rocketmq + depends_on: + - broker + ports: + - 8080:8080 + - 8081:8081 + restart: on-failure + environment: + - NAMESRV_ADDR=rmqnamesrv:9876 + volumes: + - /docker/rocketmq/proxy/logs:/home/rocketmq/logs + - /docker/rocketmq/conf/rmq-proxy.json:/opt/rocketmq-5.2.0/conf/rmq-proxy.json + command: sh mqproxy -pc /opt/rocketmq-5.2.0/conf/rmq-proxy.json + +networks: + rocketmq: + driver: bridge +``` +## 4.启动RocketMQ集群 +根据docker-compose.yml文件启动所有定义的服务。 + +```shell +docker-compose up -d +``` + +## 5.工具测试消息收发 +```shell +# 进入broker容器 +$ docker exec -it rmqbroker bash + +$ sh tools.sh org.apache.rocketmq.example.quickstart.Producer + SendResult [sendStatus=SEND_OK, msgId= ... + +$ sh tools.sh org.apache.rocketmq.example.quickstart.Consumer + ConsumeMessageThread_%d Receive New Messages: [MessageExt... +``` + +## 6.SDK测试消息收发 + +工具测试完成后,我们可以尝试使用 SDK 收发消息。这里以 Java SDK 为例介绍一下消息收发过程,可以从 [rocketmq-clients](https://github.com/apache/rocketmq-clients) 中参阅更多细节。 + +1. 在IDEA中创建一个Java工程。 + +2. 在 *pom.xml* 文件中添加以下依赖引入Java依赖库,将 `rocketmq-client-java-version` 替换成 最新的版本. + + ```xml + + org.apache.rocketmq + rocketmq-client-java + ${rocketmq-client-java-version} + + ``` + +3. 进入broker容器,通过mqadmin创建 Topic。 + + ```shell + $ docker exec -it rmqbroker bash + $ sh mqadmin updatetopic -t TestTopic -c DefaultCluster + ``` + +4. 在已创建的Java工程中,创建发送普通消息程序并运行,示例代码如下: + + ```java + import org.apache.rocketmq.client.apis.ClientConfiguration; + import org.apache.rocketmq.client.apis.ClientConfigurationBuilder; + import org.apache.rocketmq.client.apis.ClientException; + import org.apache.rocketmq.client.apis.ClientServiceProvider; + import org.apache.rocketmq.client.apis.message.Message; + import org.apache.rocketmq.client.apis.producer.Producer; + import org.apache.rocketmq.client.apis.producer.SendReceipt; + import org.slf4j.Logger; + import org.slf4j.LoggerFactory; + + public class ProducerExample { + private static final Logger logger = LoggerFactory.getLogger(ProducerExample.class); + + public static void main(String[] args) throws ClientException { + // 接入点地址,需要设置成Proxy的地址和端口列表,一般是xxx:8080;xxx:8081 + // 此处为示例,实际使用时请替换为真实的 Proxy 地址和端口 + String endpoint = "localhost:8081"; + // 消息发送的目标Topic名称,需要提前创建。 + String topic = "TestTopic"; + ClientServiceProvider provider = ClientServiceProvider.loadService(); + ClientConfigurationBuilder builder = ClientConfiguration.newBuilder().setEndpoints(endpoint); + ClientConfiguration configuration = builder.build(); + // 初始化Producer时需要设置通信配置以及预绑定的Topic。 + Producer producer = provider.newProducerBuilder() + .setTopics(topic) + .setClientConfiguration(configuration) + .build(); + // 普通消息发送。 + Message message = provider.newMessageBuilder() + .setTopic(topic) + // 设置消息索引键,可根据关键字精确查找某条消息。 + .setKeys("messageKey") + // 设置消息Tag,用于消费端根据指定Tag过滤消息。 + .setTag("messageTag") + // 消息体。 + .setBody("messageBody".getBytes()) + .build(); + try { + // 发送消息,需要关注发送结果,并捕获失败等异常。 + SendReceipt sendReceipt = producer.send(message); + logger.info("Send message successfully, messageId={}", sendReceipt.getMessageId()); + } catch (ClientException e) { + logger.error("Failed to send message", e); + } + // producer.close(); + } + } + ``` + +5. 在已创建的Java工程中,创建订阅普通消息程序并运行。Apache RocketMQ 支持[SimpleConsumer](https://rocketmq.apache.org/zh/docs/featureBehavior/06consumertype)和[PushConsumer](https://rocketmq.apache.org/zh/docs/featureBehavior/06consumertype)两种消费者类型,您可以选择以下任意一种方式订阅消息。 + +```java +import java.io.IOException; +import java.util.Collections; +import org.apache.rocketmq.client.apis.ClientConfiguration; +import org.apache.rocketmq.client.apis.ClientException; +import org.apache.rocketmq.client.apis.ClientServiceProvider; +import org.apache.rocketmq.client.apis.consumer.ConsumeResult; +import org.apache.rocketmq.client.apis.consumer.FilterExpression; +import org.apache.rocketmq.client.apis.consumer.FilterExpressionType; +import org.apache.rocketmq.client.apis.consumer.PushConsumer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class PushConsumerExample { + private static final Logger logger = LoggerFactory.getLogger(PushConsumerExample.class); + + private PushConsumerExample() { + } + + public static void main(String[] args) throws ClientException, IOException, InterruptedException { + final ClientServiceProvider provider = ClientServiceProvider.loadService(); + // 接入点地址,需要设置成Proxy的地址和端口列表,一般是xxx:8081;xxx:8081 + // 此处为示例,实际使用时请替换为真实的 Proxy 地址和端口 + String endpoints = "localhost:8081"; + ClientConfiguration clientConfiguration = ClientConfiguration.newBuilder() + .setEndpoints(endpoints) + .build(); + // 订阅消息的过滤规则,表示订阅所有Tag的消息。 + String tag = "*"; + FilterExpression filterExpression = new FilterExpression(tag, FilterExpressionType.TAG); + // 为消费者指定所属的消费者分组,Group需要提前创建。 + String consumerGroup = "YourConsumerGroup"; + // 指定需要订阅哪个目标Topic,Topic需要提前创建。 + String topic = "TestTopic"; + // 初始化PushConsumer,需要绑定消费者分组ConsumerGroup、通信参数以及订阅关系。 + PushConsumer pushConsumer = provider.newPushConsumerBuilder() + .setClientConfiguration(clientConfiguration) + // 设置消费者分组。 + .setConsumerGroup(consumerGroup) + // 设置预绑定的订阅关系。 + .setSubscriptionExpressions(Collections.singletonMap(topic, filterExpression)) + // 设置消费监听器。 + .setMessageListener(messageView -> { + // 处理消息并返回消费结果。 + logger.info("Consume message successfully, messageId={}", messageView.getMessageId()); + return ConsumeResult.SUCCESS; + }) + .build(); + Thread.sleep(Long.MAX_VALUE); + // 如果不需要再使用 PushConsumer,可关闭该实例。 + // pushConsumer.close(); + } +} +``` + +## 7.停止所有服务 + +```shell +docker-compose down +``` \ No newline at end of file From 17fd429fa2a8e44c292b24d7c2f8d1675a2ee543 Mon Sep 17 00:00:00 2001 From: Kaxiya <125204531+kaxiya1021@users.noreply.github.com> Date: Thu, 30 May 2024 16:38:25 +0800 Subject: [PATCH 02/10] Modified Docker Compose deployment for RocketMQ version 5.0 --- ....x.md => 03quickstartWithDockercompose.md} | 114 +++++------------- 1 file changed, 31 insertions(+), 83 deletions(-) rename versioned_docs/version-5.0/02-quickStart/{03quickstartWithDockercompose5.x.md => 03quickstartWithDockercompose.md} (79%) diff --git a/versioned_docs/version-5.0/02-quickStart/03quickstartWithDockercompose5.x.md b/versioned_docs/version-5.0/02-quickStart/03quickstartWithDockercompose.md similarity index 79% rename from versioned_docs/version-5.0/02-quickStart/03quickstartWithDockercompose5.x.md rename to versioned_docs/version-5.0/02-quickStart/03quickstartWithDockercompose.md index 1b21d25809..e92aca0597 100644 --- a/versioned_docs/version-5.0/02-quickStart/03quickstartWithDockercompose5.x.md +++ b/versioned_docs/version-5.0/02-quickStart/03quickstartWithDockercompose.md @@ -1,80 +1,35 @@ -# Docker-compose 部署 RocketMQ 5.X +# Docker-compose 部署 RocketMQ 这一节介绍如何使用Docker-compose快速部署一个单节点单副本 RocketMQ 服务,并完成简单的消息收发。 :::tip 系统要求 -1. 64位操作系统,推荐 Linux/Unix/macOS +1. 64位操作系统 2. 64位 JDK 1.8+ ::: -## 1.创建映射目录 +## 1.创建配置文件 ```shell -# 创建映射目录 -mkdir -p /docker/rocketmq/broker/logs -mkdir -p /docker/rocketmq/broker/store -mkdir -p /docker/rocketmq/nameserver/logs -mkdir -p /docker/rocketmq/proxy/logs -mkdir -p /docker/rocketmq/conf - -# 给予权限 -chmod -R 777 /docker/rocketmq -``` -## 2.创建配置文件 -```shell -# 创建配置文件broker.conf -vim /docker/rocketmq/conf/broker.conf -``` -```text -# 集群名称 -brokerClusterName = DefaultCluster -# 节点名称 -brokerName = broker-a -# broker ID,0 表示 master,其他正整数表示 slave,不能小于 0 -brokerId = 0 -# 每天删除超过文件保留时间的 commit log 的时间,默认值为 04 -deleteWhen = 04 -# 文件保留时间,以小时计算,默认值为 72 小时 -fileReservedTime = 48 -# Broker 角色 -brokerRole = ASYNC_MASTER -# 刷盘方式 -flushDiskType = ASYNC_FLUSH +# 配置 broker 的IP地址 +echo "brokerIP1=127.0.0.1" > broker.conf ``` -```shell -# 创建配置文件rmq-proxy.json -vim /docker/rocketmq/conf/rmq-proxy.json -``` - -``` -{ - "rocketMQClusterName": "DefaultCluster" -} -``` - - - -## 3.编写docker-compose +## 2.编写docker-compose 为了快速启动并运行 RockerMQ 集群,您可以使用以下模板通过修改或添加环境部分中的配置来创建 docker-compose.yml 文件。 ```text version: '3.8' - services: namesrv: image: apache/rocketmq:5.2.0 container_name: rmqnamesrv ports: - 9876:9876 - volumes: - - /docker/rocketmq/nameserver/logs:/home/rocketmq/logs networks: - rocketmq command: sh mqnamesrv - broker: image: apache/rocketmq:5.2.0 container_name: rmqbroker @@ -84,17 +39,12 @@ services: - 10912:10912 environment: - NAMESRV_ADDR=rmqnamesrv:9876 - volumes: - - /docker/rocketmq/broker/logs:/home/rocketmq/logs - - /docker/rocketmq/broker/store:/home/rocketmq/store - - /docker/rocketmq/conf:/home/rocketmq/conf + - ./broker.conf:/home/rocketmq/rocketmq-5.2.0/conf/broker.conf depends_on: - namesrv networks: - rocketmq - command: sh mqbroker -c /home/rocketmq/conf/broker.conf - - #Service for proxy + command: sh mqbroker -c /home/rocketmq/rocketmq-5.2.0/conf/broker.conf proxy: image: apache/rocketmq:5.2.0 container_name: rmqproxy @@ -108,23 +58,32 @@ services: restart: on-failure environment: - NAMESRV_ADDR=rmqnamesrv:9876 - volumes: - - /docker/rocketmq/proxy/logs:/home/rocketmq/logs - - /docker/rocketmq/conf/rmq-proxy.json:/opt/rocketmq-5.2.0/conf/rmq-proxy.json - command: sh mqproxy -pc /opt/rocketmq-5.2.0/conf/rmq-proxy.json - + command: sh mqproxy networks: rocketmq: driver: bridge ``` -## 4.启动RocketMQ集群 -根据docker-compose.yml文件启动所有定义的服务。 +## 3.启动RocketMQ集群 +根据 docker-compose.yml 文件启动所有定义的服务。 + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + + + ```shell docker-compose up -d ``` + + + +```shell +docker-compose -p rockermq_project up -d +``` + -## 5.工具测试消息收发 +## 4.工具测试消息收发 ```shell # 进入broker容器 $ docker exec -it rmqbroker bash @@ -136,14 +95,10 @@ $ sh tools.sh org.apache.rocketmq.example.quickstart.Consumer ConsumeMessageThread_%d Receive New Messages: [MessageExt... ``` -## 6.SDK测试消息收发 - +## 5.SDK测试消息收发 工具测试完成后,我们可以尝试使用 SDK 收发消息。这里以 Java SDK 为例介绍一下消息收发过程,可以从 [rocketmq-clients](https://github.com/apache/rocketmq-clients) 中参阅更多细节。 - 1. 在IDEA中创建一个Java工程。 - 2. 在 *pom.xml* 文件中添加以下依赖引入Java依赖库,将 `rocketmq-client-java-version` 替换成 最新的版本. - ```xml org.apache.rocketmq @@ -151,16 +106,12 @@ $ sh tools.sh org.apache.rocketmq.example.quickstart.Consumer ${rocketmq-client-java-version} ``` - 3. 进入broker容器,通过mqadmin创建 Topic。 - ```shell $ docker exec -it rmqbroker bash $ sh mqadmin updatetopic -t TestTopic -c DefaultCluster ``` - 4. 在已创建的Java工程中,创建发送普通消息程序并运行,示例代码如下: - ```java import org.apache.rocketmq.client.apis.ClientConfiguration; import org.apache.rocketmq.client.apis.ClientConfigurationBuilder; @@ -171,10 +122,10 @@ $ sh tools.sh org.apache.rocketmq.example.quickstart.Consumer import org.apache.rocketmq.client.apis.producer.SendReceipt; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - + public class ProducerExample { private static final Logger logger = LoggerFactory.getLogger(ProducerExample.class); - + public static void main(String[] args) throws ClientException { // 接入点地址,需要设置成Proxy的地址和端口列表,一般是xxx:8080;xxx:8081 // 此处为示例,实际使用时请替换为真实的 Proxy 地址和端口 @@ -210,9 +161,7 @@ $ sh tools.sh org.apache.rocketmq.example.quickstart.Consumer } } ``` - 5. 在已创建的Java工程中,创建订阅普通消息程序并运行。Apache RocketMQ 支持[SimpleConsumer](https://rocketmq.apache.org/zh/docs/featureBehavior/06consumertype)和[PushConsumer](https://rocketmq.apache.org/zh/docs/featureBehavior/06consumertype)两种消费者类型,您可以选择以下任意一种方式订阅消息。 - ```java import java.io.IOException; import java.util.Collections; @@ -266,10 +215,9 @@ public class PushConsumerExample { // pushConsumer.close(); } } -``` - -## 7.停止所有服务 +``` +## 6.停止所有服务 ```shell docker-compose down -``` \ No newline at end of file +``` From fdcface24453b2950d709f5d8df6bff296331fbd Mon Sep 17 00:00:00 2001 From: Kaxiya <125204531+kaxiya1021@users.noreply.github.com> Date: Thu, 30 May 2024 17:00:46 +0800 Subject: [PATCH 03/10] Delete the configuration file and use the default settings. --- .../03quickstartWithDockercompose.md | 23 +++++++------------ 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/versioned_docs/version-5.0/02-quickStart/03quickstartWithDockercompose.md b/versioned_docs/version-5.0/02-quickStart/03quickstartWithDockercompose.md index e92aca0597..f0db4d9357 100644 --- a/versioned_docs/version-5.0/02-quickStart/03quickstartWithDockercompose.md +++ b/versioned_docs/version-5.0/02-quickStart/03quickstartWithDockercompose.md @@ -9,14 +9,8 @@ ::: -## 1.创建配置文件 -```shell -# 配置 broker 的IP地址 -echo "brokerIP1=127.0.0.1" > broker.conf -``` - -## 2.编写docker-compose +## 1.编写docker-compose 为了快速启动并运行 RockerMQ 集群,您可以使用以下模板通过修改或添加环境部分中的配置来创建 docker-compose.yml 文件。 ```text @@ -30,7 +24,7 @@ services: networks: - rocketmq command: sh mqnamesrv - broker: + broker: image: apache/rocketmq:5.2.0 container_name: rmqbroker ports: @@ -39,12 +33,11 @@ services: - 10912:10912 environment: - NAMESRV_ADDR=rmqnamesrv:9876 - - ./broker.conf:/home/rocketmq/rocketmq-5.2.0/conf/broker.conf depends_on: - namesrv networks: - rocketmq - command: sh mqbroker -c /home/rocketmq/rocketmq-5.2.0/conf/broker.conf + command: sh mqbroker proxy: image: apache/rocketmq:5.2.0 container_name: rmqproxy @@ -64,7 +57,7 @@ networks: driver: bridge ``` -## 3.启动RocketMQ集群 +## 2.启动RocketMQ集群 根据 docker-compose.yml 文件启动所有定义的服务。 import Tabs from '@theme/Tabs'; @@ -83,7 +76,7 @@ docker-compose -p rockermq_project up -d ``` -## 4.工具测试消息收发 +## 3.工具测试消息收发 ```shell # 进入broker容器 $ docker exec -it rmqbroker bash @@ -94,8 +87,7 @@ $ sh tools.sh org.apache.rocketmq.example.quickstart.Producer $ sh tools.sh org.apache.rocketmq.example.quickstart.Consumer ConsumeMessageThread_%d Receive New Messages: [MessageExt... ``` - -## 5.SDK测试消息收发 +## 4.SDK测试消息收发 工具测试完成后,我们可以尝试使用 SDK 收发消息。这里以 Java SDK 为例介绍一下消息收发过程,可以从 [rocketmq-clients](https://github.com/apache/rocketmq-clients) 中参阅更多细节。 1. 在IDEA中创建一个Java工程。 2. 在 *pom.xml* 文件中添加以下依赖引入Java依赖库,将 `rocketmq-client-java-version` 替换成 最新的版本. @@ -217,7 +209,8 @@ public class PushConsumerExample { } ``` -## 6.停止所有服务 + +## 5.停止所有服务 ```shell docker-compose down ``` From 7dcfda835b35bde834fe4af5cc5c16307e948517 Mon Sep 17 00:00:00 2001 From: Kaxiya <125204531+kaxiya1021@users.noreply.github.com> Date: Thu, 30 May 2024 17:11:47 +0800 Subject: [PATCH 04/10] fixed bugs --- .../version-5.0/02-quickStart/03quickstartWithDockercompose.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/versioned_docs/version-5.0/02-quickStart/03quickstartWithDockercompose.md b/versioned_docs/version-5.0/02-quickStart/03quickstartWithDockercompose.md index f0db4d9357..7a8944422d 100644 --- a/versioned_docs/version-5.0/02-quickStart/03quickstartWithDockercompose.md +++ b/versioned_docs/version-5.0/02-quickStart/03quickstartWithDockercompose.md @@ -70,10 +70,10 @@ docker-compose up -d ``` - ```shell docker-compose -p rockermq_project up -d ``` + ## 3.工具测试消息收发 From e3abbc25bed61938333616fb46c4387fada6edad Mon Sep 17 00:00:00 2001 From: Kaxiya <125204531+kaxiya1021@users.noreply.github.com> Date: Thu, 30 May 2024 17:59:25 +0800 Subject: [PATCH 05/10] Solved the error when starting the proxy on Linux --- .../version-5.0/02-quickStart/03quickstartWithDockercompose.md | 1 + 1 file changed, 1 insertion(+) diff --git a/versioned_docs/version-5.0/02-quickStart/03quickstartWithDockercompose.md b/versioned_docs/version-5.0/02-quickStart/03quickstartWithDockercompose.md index 7a8944422d..2e77218177 100644 --- a/versioned_docs/version-5.0/02-quickStart/03quickstartWithDockercompose.md +++ b/versioned_docs/version-5.0/02-quickStart/03quickstartWithDockercompose.md @@ -45,6 +45,7 @@ services: - rocketmq depends_on: - broker + - namesrv ports: - 8080:8080 - 8081:8081 From 5b9a665e5f662dbed38d00f07ce8be5c8c09b289 Mon Sep 17 00:00:00 2001 From: Kaxiya <125204531+kaxiya1021@users.noreply.github.com> Date: Thu, 30 May 2024 18:26:29 +0800 Subject: [PATCH 06/10] Add English version --- .../03quickstartWithDockercompose.md | 233 ++++++++++++++++++ 1 file changed, 233 insertions(+) create mode 100644 i18n/en/docusaurus-plugin-content-docs/version-5.0/02-quickStart/03quickstartWithDockercompose.md diff --git a/i18n/en/docusaurus-plugin-content-docs/version-5.0/02-quickStart/03quickstartWithDockercompose.md b/i18n/en/docusaurus-plugin-content-docs/version-5.0/02-quickStart/03quickstartWithDockercompose.md new file mode 100644 index 0000000000..cf442dda09 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/version-5.0/02-quickStart/03quickstartWithDockercompose.md @@ -0,0 +1,233 @@ +# Docker-compose 部署 RocketMQ + +这一节介绍如何使用Docker-compose快速部署一个单节点单副本 RocketMQ 服务,并完成简单的消息收发。 + +:::tip 系统要求 + +1. 64位操作系统 +2. 64位 JDK 1.8+ + +::: + +## 1.创建配置文件 + +```shell +# 配置 broker 的IP地址 +echo "brokerIP1=127.0.0.1" > broker.conf +``` + +```shell +# 创建配置文件rmq-proxy.json +vim /docker/rocketmq/conf/rmq-proxy.json +``` + +``` +{ + "rocketMQClusterName": "DefaultCluster" +} +``` + + + +## 2.编写docker-compose + +为了快速启动并运行 RockerMQ 集群,您可以使用以下模板通过修改或添加环境部分中的配置来创建 docker-compose.yml 文件。 +```text +version: '3.8' +services: + namesrv: + image: apache/rocketmq:5.2.0 + container_name: rmqnamesrv + ports: + - 9876:9876 + networks: + - rocketmq + command: sh mqnamesrv + broker: + image: apache/rocketmq:5.2.0 + container_name: rmqbroker + ports: + - 10909:10909 + - 10911:10911 + - 10912:10912 + environment: + - NAMESRV_ADDR=rmqnamesrv:9876 + - ./broker.conf:/home/rocketmq/rocketmq-5.2.0/conf/broker.conf + depends_on: + - namesrv + networks: + - rocketmq + command: sh mqbroker -c /home/rocketmq/rocketmq-5.2.0/conf/broker.conf + proxy: + image: apache/rocketmq:5.2.0 + container_name: rmqproxy + networks: + - rocketmq + depends_on: + - broker + ports: + - 8080:8080 + - 8081:8081 + restart: on-failure + environment: + - NAMESRV_ADDR=rmqnamesrv:9876 + command: sh mqproxy +networks: + rocketmq: + driver: bridge +``` +## 3.启动RocketMQ集群 +根据 docker-compose.yml 文件启动所有定义的服务。 + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + + + +```shell +docker-compose up -d +``` + + + +```shell +docker-compose -p rockermq_project up -d +``` + + +## 4.工具测试消息收发 +```shell +# 进入broker容器 +$ docker exec -it rmqbroker bash + +$ sh tools.sh org.apache.rocketmq.example.quickstart.Producer + SendResult [sendStatus=SEND_OK, msgId= ... + +$ sh tools.sh org.apache.rocketmq.example.quickstart.Consumer + ConsumeMessageThread_%d Receive New Messages: [MessageExt... +``` +## 5.SDK测试消息收发 +工具测试完成后,我们可以尝试使用 SDK 收发消息。这里以 Java SDK 为例介绍一下消息收发过程,可以从 [rocketmq-clients](https://github.com/apache/rocketmq-clients) 中参阅更多细节。 +1. 在IDEA中创建一个Java工程。 +2. 在 *pom.xml* 文件中添加以下依赖引入Java依赖库,将 `rocketmq-client-java-version` 替换成 最新的版本. + ```xml + + org.apache.rocketmq + rocketmq-client-java + ${rocketmq-client-java-version} + + ``` +3. 进入broker容器,通过mqadmin创建 Topic。 + ```shell + $ docker exec -it rmqbroker bash + $ sh mqadmin updatetopic -t TestTopic -c DefaultCluster + ``` +4. 在已创建的Java工程中,创建发送普通消息程序并运行,示例代码如下: + ```java + import org.apache.rocketmq.client.apis.ClientConfiguration; + import org.apache.rocketmq.client.apis.ClientConfigurationBuilder; + import org.apache.rocketmq.client.apis.ClientException; + import org.apache.rocketmq.client.apis.ClientServiceProvider; + import org.apache.rocketmq.client.apis.message.Message; + import org.apache.rocketmq.client.apis.producer.Producer; + import org.apache.rocketmq.client.apis.producer.SendReceipt; + import org.slf4j.Logger; + import org.slf4j.LoggerFactory; + + public class ProducerExample { + private static final Logger logger = LoggerFactory.getLogger(ProducerExample.class); + + public static void main(String[] args) throws ClientException { + // 接入点地址,需要设置成Proxy的地址和端口列表,一般是xxx:8080;xxx:8081 + // 此处为示例,实际使用时请替换为真实的 Proxy 地址和端口 + String endpoint = "localhost:8081"; + // 消息发送的目标Topic名称,需要提前创建。 + String topic = "TestTopic"; + ClientServiceProvider provider = ClientServiceProvider.loadService(); + ClientConfigurationBuilder builder = ClientConfiguration.newBuilder().setEndpoints(endpoint); + ClientConfiguration configuration = builder.build(); + // 初始化Producer时需要设置通信配置以及预绑定的Topic。 + Producer producer = provider.newProducerBuilder() + .setTopics(topic) + .setClientConfiguration(configuration) + .build(); + // 普通消息发送。 + Message message = provider.newMessageBuilder() + .setTopic(topic) + // 设置消息索引键,可根据关键字精确查找某条消息。 + .setKeys("messageKey") + // 设置消息Tag,用于消费端根据指定Tag过滤消息。 + .setTag("messageTag") + // 消息体。 + .setBody("messageBody".getBytes()) + .build(); + try { + // 发送消息,需要关注发送结果,并捕获失败等异常。 + SendReceipt sendReceipt = producer.send(message); + logger.info("Send message successfully, messageId={}", sendReceipt.getMessageId()); + } catch (ClientException e) { + logger.error("Failed to send message", e); + } + // producer.close(); + } + } + ``` +5. 在已创建的Java工程中,创建订阅普通消息程序并运行。Apache RocketMQ 支持[SimpleConsumer](https://rocketmq.apache.org/zh/docs/featureBehavior/06consumertype)和[PushConsumer](https://rocketmq.apache.org/zh/docs/featureBehavior/06consumertype)两种消费者类型,您可以选择以下任意一种方式订阅消息。 +```java +import java.io.IOException; +import java.util.Collections; +import org.apache.rocketmq.client.apis.ClientConfiguration; +import org.apache.rocketmq.client.apis.ClientException; +import org.apache.rocketmq.client.apis.ClientServiceProvider; +import org.apache.rocketmq.client.apis.consumer.ConsumeResult; +import org.apache.rocketmq.client.apis.consumer.FilterExpression; +import org.apache.rocketmq.client.apis.consumer.FilterExpressionType; +import org.apache.rocketmq.client.apis.consumer.PushConsumer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class PushConsumerExample { + private static final Logger logger = LoggerFactory.getLogger(PushConsumerExample.class); + + private PushConsumerExample() { + } + + public static void main(String[] args) throws ClientException, IOException, InterruptedException { + final ClientServiceProvider provider = ClientServiceProvider.loadService(); + // 接入点地址,需要设置成Proxy的地址和端口列表,一般是xxx:8081;xxx:8081 + // 此处为示例,实际使用时请替换为真实的 Proxy 地址和端口 + String endpoints = "localhost:8081"; + ClientConfiguration clientConfiguration = ClientConfiguration.newBuilder() + .setEndpoints(endpoints) + .build(); + // 订阅消息的过滤规则,表示订阅所有Tag的消息。 + String tag = "*"; + FilterExpression filterExpression = new FilterExpression(tag, FilterExpressionType.TAG); + // 为消费者指定所属的消费者分组,Group需要提前创建。 + String consumerGroup = "YourConsumerGroup"; + // 指定需要订阅哪个目标Topic,Topic需要提前创建。 + String topic = "TestTopic"; + // 初始化PushConsumer,需要绑定消费者分组ConsumerGroup、通信参数以及订阅关系。 + PushConsumer pushConsumer = provider.newPushConsumerBuilder() + .setClientConfiguration(clientConfiguration) + // 设置消费者分组。 + .setConsumerGroup(consumerGroup) + // 设置预绑定的订阅关系。 + .setSubscriptionExpressions(Collections.singletonMap(topic, filterExpression)) + // 设置消费监听器。 + .setMessageListener(messageView -> { + // 处理消息并返回消费结果。 + logger.info("Consume message successfully, messageId={}", messageView.getMessageId()); + return ConsumeResult.SUCCESS; + }) + .build(); + Thread.sleep(Long.MAX_VALUE); + // 如果不需要再使用 PushConsumer,可关闭该实例。 + // pushConsumer.close(); + } +} +``` +## 6.停止所有服务 +```shell +docker-compose down +``` \ No newline at end of file From 002c60ca1dacdd043f0e849d4d91a879f0d9b683 Mon Sep 17 00:00:00 2001 From: Kaxiya <125204531+kaxiya1021@users.noreply.github.com> Date: Thu, 30 May 2024 18:29:09 +0800 Subject: [PATCH 07/10] Revised some sentences. --- .../02-quickStart/03quickstartWithDockercompose.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/versioned_docs/version-5.0/02-quickStart/03quickstartWithDockercompose.md b/versioned_docs/version-5.0/02-quickStart/03quickstartWithDockercompose.md index 2e77218177..c8fec7249d 100644 --- a/versioned_docs/version-5.0/02-quickStart/03quickstartWithDockercompose.md +++ b/versioned_docs/version-5.0/02-quickStart/03quickstartWithDockercompose.md @@ -121,7 +121,6 @@ $ sh tools.sh org.apache.rocketmq.example.quickstart.Consumer public static void main(String[] args) throws ClientException { // 接入点地址,需要设置成Proxy的地址和端口列表,一般是xxx:8080;xxx:8081 - // 此处为示例,实际使用时请替换为真实的 Proxy 地址和端口 String endpoint = "localhost:8081"; // 消息发送的目标Topic名称,需要提前创建。 String topic = "TestTopic"; @@ -176,8 +175,7 @@ public class PushConsumerExample { public static void main(String[] args) throws ClientException, IOException, InterruptedException { final ClientServiceProvider provider = ClientServiceProvider.loadService(); - // 接入点地址,需要设置成Proxy的地址和端口列表,一般是xxx:8081;xxx:8081 - // 此处为示例,实际使用时请替换为真实的 Proxy 地址和端口 + // 接入点地址,需要设置成Proxy的地址和端口列表,一般是xxx:8080;xxx:8081 String endpoints = "localhost:8081"; ClientConfiguration clientConfiguration = ClientConfiguration.newBuilder() .setEndpoints(endpoints) From 0e3b66c2b09ec887c1ada73ca304bbd62c903ed4 Mon Sep 17 00:00:00 2001 From: Kaxiya <125204531+kaxiya1021@users.noreply.github.com> Date: Thu, 30 May 2024 18:35:27 +0800 Subject: [PATCH 08/10] Fixed the bugs --- .../03quickstartWithDockercompose.md | 112 ++++++++---------- 1 file changed, 49 insertions(+), 63 deletions(-) diff --git a/i18n/en/docusaurus-plugin-content-docs/version-5.0/02-quickStart/03quickstartWithDockercompose.md b/i18n/en/docusaurus-plugin-content-docs/version-5.0/02-quickStart/03quickstartWithDockercompose.md index cf442dda09..7637b5d7cb 100644 --- a/i18n/en/docusaurus-plugin-content-docs/version-5.0/02-quickStart/03quickstartWithDockercompose.md +++ b/i18n/en/docusaurus-plugin-content-docs/version-5.0/02-quickStart/03quickstartWithDockercompose.md @@ -1,37 +1,18 @@ -# Docker-compose 部署 RocketMQ +# Docker-compose Deployment of RocketMQ -这一节介绍如何使用Docker-compose快速部署一个单节点单副本 RocketMQ 服务,并完成简单的消息收发。 +This section introduces how to quickly deploy a single-node, single-replica RocketMQ service using Docker-compose and complete simple message sending and receiving. -:::tip 系统要求 +:::tip System Requirements -1. 64位操作系统 -2. 64位 JDK 1.8+ +1. 64-bit operating system +2. 64-bit JDK 1.8+ ::: -## 1.创建配置文件 +## 1. Write docker-compose -```shell -# 配置 broker 的IP地址 -echo "brokerIP1=127.0.0.1" > broker.conf -``` - -```shell -# 创建配置文件rmq-proxy.json -vim /docker/rocketmq/conf/rmq-proxy.json -``` - -``` -{ - "rocketMQClusterName": "DefaultCluster" -} -``` - - - -## 2.编写docker-compose +To quickly start and run the RocketMQ cluster, you can use the following template to create a docker-compose.yml file by modifying or adding configurations in the environment section. -为了快速启动并运行 RockerMQ 集群,您可以使用以下模板通过修改或添加环境部分中的配置来创建 docker-compose.yml 文件。 ```text version: '3.8' services: @@ -43,7 +24,7 @@ services: networks: - rocketmq command: sh mqnamesrv - broker: + broker: image: apache/rocketmq:5.2.0 container_name: rmqbroker ports: @@ -52,12 +33,11 @@ services: - 10912:10912 environment: - NAMESRV_ADDR=rmqnamesrv:9876 - - ./broker.conf:/home/rocketmq/rocketmq-5.2.0/conf/broker.conf depends_on: - namesrv networks: - rocketmq - command: sh mqbroker -c /home/rocketmq/rocketmq-5.2.0/conf/broker.conf + command: sh mqbroker proxy: image: apache/rocketmq:5.2.0 container_name: rmqproxy @@ -65,6 +45,7 @@ services: - rocketmq depends_on: - broker + - namesrv ports: - 8080:8080 - 8081:8081 @@ -76,8 +57,9 @@ networks: rocketmq: driver: bridge ``` -## 3.启动RocketMQ集群 -根据 docker-compose.yml 文件启动所有定义的服务。 + +## 2.Start RocketMQ cluster +tart all defined services according to the docker-compose.yml file. import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; @@ -89,15 +71,15 @@ docker-compose up -d ``` - ```shell docker-compose -p rockermq_project up -d ``` + -## 4.工具测试消息收发 +## 3.Send and Receive Messages with Tools ```shell -# 进入broker容器 +# Enter the broker container $ docker exec -it rmqbroker bash $ sh tools.sh org.apache.rocketmq.example.quickstart.Producer @@ -106,10 +88,12 @@ $ sh tools.sh org.apache.rocketmq.example.quickstart.Producer $ sh tools.sh org.apache.rocketmq.example.quickstart.Consumer ConsumeMessageThread_%d Receive New Messages: [MessageExt... ``` -## 5.SDK测试消息收发 -工具测试完成后,我们可以尝试使用 SDK 收发消息。这里以 Java SDK 为例介绍一下消息收发过程,可以从 [rocketmq-clients](https://github.com/apache/rocketmq-clients) 中参阅更多细节。 -1. 在IDEA中创建一个Java工程。 -2. 在 *pom.xml* 文件中添加以下依赖引入Java依赖库,将 `rocketmq-client-java-version` 替换成 最新的版本. + +## 4.Send and Receive Messages with SDK +1. After testing with tools, we can try to send and receive messages using the SDK. Here is an example of using the Java SDK for message sending and receiving. More details can be found at [rocketmq-clients](https://github.com/apache/rocketmq-clients). + +2. Add the following dependency to the pom.xml file to introduce the Java dependency library, replacing `rocketmq-client-java-version` with the latest version. + ```xml org.apache.rocketmq @@ -117,12 +101,13 @@ $ sh tools.sh org.apache.rocketmq.example.quickstart.Consumer ${rocketmq-client-java-version} ``` -3. 进入broker容器,通过mqadmin创建 Topic。 + +3. Enter the broker container and create a Topic using mqadmin. ```shell $ docker exec -it rmqbroker bash $ sh mqadmin updatetopic -t TestTopic -c DefaultCluster ``` -4. 在已创建的Java工程中,创建发送普通消息程序并运行,示例代码如下: +4. In the created Java project, create and run a program to send a normal message. The sample code is as follows: ```java import org.apache.rocketmq.client.apis.ClientConfiguration; import org.apache.rocketmq.client.apis.ClientConfigurationBuilder; @@ -138,31 +123,30 @@ $ sh tools.sh org.apache.rocketmq.example.quickstart.Consumer private static final Logger logger = LoggerFactory.getLogger(ProducerExample.class); public static void main(String[] args) throws ClientException { - // 接入点地址,需要设置成Proxy的地址和端口列表,一般是xxx:8080;xxx:8081 - // 此处为示例,实际使用时请替换为真实的 Proxy 地址和端口 + // Endpoint address, set to the Proxy address and port list, usually xxx:8080;xxx:8081 String endpoint = "localhost:8081"; - // 消息发送的目标Topic名称,需要提前创建。 + // The target Topic name for message sending, which needs to be created in advance. String topic = "TestTopic"; ClientServiceProvider provider = ClientServiceProvider.loadService(); ClientConfigurationBuilder builder = ClientConfiguration.newBuilder().setEndpoints(endpoint); ClientConfiguration configuration = builder.build(); - // 初始化Producer时需要设置通信配置以及预绑定的Topic。 + // When initializing Producer, communication configuration and pre-bound Topic need to be set. Producer producer = provider.newProducerBuilder() .setTopics(topic) .setClientConfiguration(configuration) .build(); - // 普通消息发送。 + // Sending a normal message. Message message = provider.newMessageBuilder() .setTopic(topic) - // 设置消息索引键,可根据关键字精确查找某条消息。 + // Set the message index key, which can be used to accurately find a specific message. .setKeys("messageKey") - // 设置消息Tag,用于消费端根据指定Tag过滤消息。 + // Set the message Tag, used by the consumer to filter messages by specified Tag. .setTag("messageTag") - // 消息体。 + // Message body. .setBody("messageBody".getBytes()) .build(); try { - // 发送消息,需要关注发送结果,并捕获失败等异常。 + // Send the message, paying attention to the sending result and catching exceptions. SendReceipt sendReceipt = producer.send(message); logger.info("Send message successfully, messageId={}", sendReceipt.getMessageId()); } catch (ClientException e) { @@ -172,7 +156,8 @@ $ sh tools.sh org.apache.rocketmq.example.quickstart.Consumer } } ``` -5. 在已创建的Java工程中,创建订阅普通消息程序并运行。Apache RocketMQ 支持[SimpleConsumer](https://rocketmq.apache.org/zh/docs/featureBehavior/06consumertype)和[PushConsumer](https://rocketmq.apache.org/zh/docs/featureBehavior/06consumertype)两种消费者类型,您可以选择以下任意一种方式订阅消息。 +3. In the created Java project, create and run a program to subscribe to normal messages. Apache RocketMQ supports both [SimpleConsumer](https://rocketmq.apache.org/zh/docs/featureBehavior/06consumertype) and [PushConsumer](https://rocketmq.apache.org/zh/docs/featureBehavior/06consumertype) types of consumers. You can choose either method to subscribe to messages. + ```java import java.io.IOException; import java.util.Collections; @@ -194,40 +179,41 @@ public class PushConsumerExample { public static void main(String[] args) throws ClientException, IOException, InterruptedException { final ClientServiceProvider provider = ClientServiceProvider.loadService(); - // 接入点地址,需要设置成Proxy的地址和端口列表,一般是xxx:8081;xxx:8081 - // 此处为示例,实际使用时请替换为真实的 Proxy 地址和端口 + // Endpoint address, set to the Proxy address and port list, usually xxx:8080;xxx:8081 String endpoints = "localhost:8081"; ClientConfiguration clientConfiguration = ClientConfiguration.newBuilder() .setEndpoints(endpoints) .build(); - // 订阅消息的过滤规则,表示订阅所有Tag的消息。 + // Subscription message filtering rule, indicating subscription to all Tag messages. String tag = "*"; FilterExpression filterExpression = new FilterExpression(tag, FilterExpressionType.TAG); - // 为消费者指定所属的消费者分组,Group需要提前创建。 + // Specify the consumer group the consumer belongs to, Group needs to be created in advance. String consumerGroup = "YourConsumerGroup"; - // 指定需要订阅哪个目标Topic,Topic需要提前创建。 + // Specify which target Topic to subscribe to, Topic needs to be created in advance. String topic = "TestTopic"; - // 初始化PushConsumer,需要绑定消费者分组ConsumerGroup、通信参数以及订阅关系。 + // Initialize PushConsumer PushConsumer pushConsumer = provider.newPushConsumerBuilder() .setClientConfiguration(clientConfiguration) - // 设置消费者分组。 + // Set the consumer group. .setConsumerGroup(consumerGroup) - // 设置预绑定的订阅关系。 + // Set pre-bound subscription relationship. .setSubscriptionExpressions(Collections.singletonMap(topic, filterExpression)) - // 设置消费监听器。 + // Set the message listener. .setMessageListener(messageView -> { - // 处理消息并返回消费结果。 + // Handle messages and return the consumption result. logger.info("Consume message successfully, messageId={}", messageView.getMessageId()); return ConsumeResult.SUCCESS; }) .build(); Thread.sleep(Long.MAX_VALUE); - // 如果不需要再使用 PushConsumer,可关闭该实例。 + // If PushConsumer is no longer needed, this instance can be closed. // pushConsumer.close(); } } + ``` -## 6.停止所有服务 + +## 5.Stop all services ```shell docker-compose down -``` \ No newline at end of file +``` From a298f2580825567ee66f2cbf6a8943dcdbfd13d8 Mon Sep 17 00:00:00 2001 From: Kaxiya <125204531+kaxiya1021@users.noreply.github.com> Date: Thu, 30 May 2024 19:07:16 +0800 Subject: [PATCH 09/10] fixed chinese version --- .../03quickstartWithDockercompose.md | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/versioned_docs/version-5.0/02-quickStart/03quickstartWithDockercompose.md b/versioned_docs/version-5.0/02-quickStart/03quickstartWithDockercompose.md index c8fec7249d..d2c96ab810 100644 --- a/versioned_docs/version-5.0/02-quickStart/03quickstartWithDockercompose.md +++ b/versioned_docs/version-5.0/02-quickStart/03quickstartWithDockercompose.md @@ -77,18 +77,7 @@ docker-compose -p rockermq_project up -d -## 3.工具测试消息收发 -```shell -# 进入broker容器 -$ docker exec -it rmqbroker bash - -$ sh tools.sh org.apache.rocketmq.example.quickstart.Producer - SendResult [sendStatus=SEND_OK, msgId= ... - -$ sh tools.sh org.apache.rocketmq.example.quickstart.Consumer - ConsumeMessageThread_%d Receive New Messages: [MessageExt... -``` -## 4.SDK测试消息收发 +## 3.SDK测试消息收发 工具测试完成后,我们可以尝试使用 SDK 收发消息。这里以 Java SDK 为例介绍一下消息收发过程,可以从 [rocketmq-clients](https://github.com/apache/rocketmq-clients) 中参阅更多细节。 1. 在IDEA中创建一个Java工程。 2. 在 *pom.xml* 文件中添加以下依赖引入Java依赖库,将 `rocketmq-client-java-version` 替换成 最新的版本. @@ -209,7 +198,7 @@ public class PushConsumerExample { ``` -## 5.停止所有服务 +## 4.停止所有服务 ```shell docker-compose down ``` From 68aeed17b1190bcb7c4ffdc10cf870339cfd9096 Mon Sep 17 00:00:00 2001 From: Kaxiya <125204531+kaxiya1021@users.noreply.github.com> Date: Thu, 30 May 2024 19:08:30 +0800 Subject: [PATCH 10/10] fixed english version --- .../03quickstartWithDockercompose.md | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/i18n/en/docusaurus-plugin-content-docs/version-5.0/02-quickStart/03quickstartWithDockercompose.md b/i18n/en/docusaurus-plugin-content-docs/version-5.0/02-quickStart/03quickstartWithDockercompose.md index 7637b5d7cb..e1c1c9b82e 100644 --- a/i18n/en/docusaurus-plugin-content-docs/version-5.0/02-quickStart/03quickstartWithDockercompose.md +++ b/i18n/en/docusaurus-plugin-content-docs/version-5.0/02-quickStart/03quickstartWithDockercompose.md @@ -77,19 +77,7 @@ docker-compose -p rockermq_project up -d -## 3.Send and Receive Messages with Tools -```shell -# Enter the broker container -$ docker exec -it rmqbroker bash - -$ sh tools.sh org.apache.rocketmq.example.quickstart.Producer - SendResult [sendStatus=SEND_OK, msgId= ... - -$ sh tools.sh org.apache.rocketmq.example.quickstart.Consumer - ConsumeMessageThread_%d Receive New Messages: [MessageExt... -``` - -## 4.Send and Receive Messages with SDK +## 3.Send and Receive Messages with SDK 1. After testing with tools, we can try to send and receive messages using the SDK. Here is an example of using the Java SDK for message sending and receiving. More details can be found at [rocketmq-clients](https://github.com/apache/rocketmq-clients). 2. Add the following dependency to the pom.xml file to introduce the Java dependency library, replacing `rocketmq-client-java-version` with the latest version. @@ -213,7 +201,7 @@ public class PushConsumerExample { ``` -## 5.Stop all services +## 4.Stop all services ```shell docker-compose down ```