This is an automated email from the ASF dual-hosted git repository.

jinrongtong pushed a commit to branch new-official-website
in repository https://gitbox.apache.org/repos/asf/rocketmq-site.git


The following commit(s) were added to refs/heads/new-official-website by this 
push:
     new 6d478d42fa Add English version for Docker Deployment 5.x (#658)
6d478d42fa is described below

commit 6d478d42fa74294b62c124fefd79f017ba520daa
Author: CindyXC <72009468+cindy0...@users.noreply.github.com>
AuthorDate: Sun Jun 2 20:25:29 2024 +0800

    Add English version for Docker Deployment 5.x (#658)
    
    Co-authored-by: XCii1 <13015886...@139.com>
---
 .../02-quickStart/02quickstartwithDocker.md        | 245 +++++++++++++++++++++
 1 file changed, 245 insertions(+)

diff --git 
a/i18n/en/docusaurus-plugin-content-docs/version-5.0/02-quickStart/02quickstartwithDocker.md
 
b/i18n/en/docusaurus-plugin-content-docs/version-5.0/02-quickStart/02quickstartwithDocker.md
new file mode 100644
index 0000000000..40b7fca624
--- /dev/null
+++ 
b/i18n/en/docusaurus-plugin-content-docs/version-5.0/02-quickStart/02quickstartwithDocker.md
@@ -0,0 +1,245 @@
+# Docker Deployment of RocketMQ
+
+This section introduces how to quickly deploy a single-node, single-replica 
RocketMQ service using Docker and complete simple message sending and receiving.
+
+:::tip System Requirements
+
+1. 64-bit operating system
+2. 64-bit JDK 1.8+
+
+:::
+
+## 1.Pull RocketMQ Image
+Here, we take the RocketMQ 5.2.0 version image from 
[dockerhub](https://hub.docker.com/r/apache/rocketmq/tags) as an example to 
introduce the deployment process.
+
+```shell
+docker pull apache/rocketmq:5.2.0
+```
+
+## 2.Create a Shared Network for Containers
+RocketMQ involves multiple services and requires multiple containers. Creating 
a Docker network facilitates communication between containers.
+
+```shell
+docker network create rocketmq
+```
+
+## 3.Start NameServer
+
+```shell
+# Start NameServer
+docker run -d --name rmqnamesrv -p 9876:9876 --network rocketmq 
apache/rocketmq:5.2.0 sh mqnamesrv
+
+# Verify if NameServer started successfully
+docker logs -f rmqnamesrv
+```
+:::info
+
+Once we see **'The Name Server boot success..'** from namesrv.log, it means 
the NameServer has been started successfully.
+
+:::
+
+## 4.Start Broker and Proxy
+After nameserver startup, we proceed to start the Broker and Proxy.
+
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+<Tabs>
+<TabItem value="Linux" label="Linux" default >
+
+```code
+# Configure the broker's IP address
+echo "brokerIP1=127.0.0.1" > broker.conf
+
+# Start the Broker and Proxy
+docker run -d \
+--name rmqbroker \
+--network rocketmq \
+-p 10912:10912 -p 10911:10911 -p 10909:10909 \
+-p 8080:8080 -p 8081:8081 \
+-e "NAMESRV_ADDR=rmqnamesrv:9876" \
+-v ./broker.conf:/home/rocketmq/rocketmq-5.2.0/conf/broker.conf \
+apache/rocketmq:5.2.0 sh mqbroker --enable-proxy \
+-c /home/rocketmq/rocketmq-5.2.0/conf/broker.conf
+
+# Verify if Broker started successfully
+docker exec -it rmqbroker bash -c "tail -n 10 
/home/rocketmq/logs/rocketmqlogs/proxy.log"
+```
+</TabItem>
+<TabItem value="Windows" label="Windows">
+
+```code
+# Configure the broker's IP address
+echo "brokerIP1=127.0.0.1" > broker.conf
+
+# Start the Broker and Proxy
+docker run -d ^
+--name rmqbroker ^
+--net rocketmq ^
+-p 10912:10912 -p 10911:10911 -p 10909:10909 ^
+-p 8080:8080 -p 8081:8081 \
+-e "NAMESRV_ADDR=rmqnamesrv:9876" ^
+-v %cd%\broker.conf:/home/rocketmq/rocketmq-5.2.0/conf/broker.conf ^
+apache/rocketmq:5.2.0 sh mqbroker --enable-proxy \
+-c /home/rocketmq/rocketmq-5.2.0/conf/broker.conf
+
+# Verify if Broker started successfully
+docker exec -it rmqbroker bash -c "tail -n 10 
/home/rocketmq/logs/rocketmqlogs/proxy.log"
+```
+
+</TabItem>
+
+</Tabs>
+
+
+:::info
+
+Once we see **'The broker[brokerName,ip:port] boot success..'** from 
proxy.log, it means the Broker has been started successfully.
+
+:::
+
+:::note
+
+Thus far, a single-Master RocketMQ cluster has been deployed, and we are able 
to send and receive simple messages.
+
+:::
+
+## 5.Send and Receive Messages with SDK
+
+We can also try to use the client sdk to send and receive messages, you can 
see more details from <a 
href='https://github.com/apache/rocketmq-clients'>rocketmq-clients</a>.
+
+1. Create a java project.
+
+2. Add sdk dependency to *pom.xml*, remember to replace the 
`rocketmq-client-java-version` with the <a 
href='https://search.maven.org/search?q=g:org.apache.rocketmq%20AND%20a:rocketmq-client-java'>latest
 release</a>.
+
+   ```xml
+   <dependency>
+       <groupId>org.apache.rocketmq</groupId>
+       <artifactId>rocketmq-client-java</artifactId>
+       <version>${rocketmq-client-java-version}</version>
+   </dependency> 
+   ```
+
+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. 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;
+   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 {
+           // Endpoint address, set to the Proxy address and port list, 
usually xxx:8080;xxx:8081
+           String endpoint = "localhost:8081";
+           // 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();
+           // 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")
+               // 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) {
+               logger.error("Failed to send message", e);
+           }
+           // producer.close();
+       }
+   }
+   ```
+
+5. 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;
+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();
+        // 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();
+        // Subscription message filtering rule, indicating subscription to all 
Tag messages.
+        String tag = "*";
+        FilterExpression filterExpression = new FilterExpression(tag, 
FilterExpressionType.TAG);
+        // Specify the consumer group the consumer belongs to, Group needs to 
be created in advance.
+        String consumerGroup = "YourConsumerGroup";
+        // Specify which target Topic to subscribe to, Topic needs to be 
created in advance.
+        String topic = "TestTopic";
+        // 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);
+        // If PushConsumer is no longer needed, this instance can be closed.
+        // pushConsumer.close();
+    }
+}
+```
+
+## 6. Stop the Containers
+After completing the experiment, we can stop the containers as follows.
+```shell
+# Stop the NameServer container
+docker stop rmqnamesrv
+
+# Stop the Broker container
+docker stop rmqbroker
+```
\ No newline at end of file

Reply via email to