You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@dubbo.apache.org by al...@apache.org on 2022/11/21 01:52:26 UTC

[dubbo-samples] branch master updated: Rocketmq demo (#584)

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

albumenj pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo-samples.git


The following commit(s) were added to refs/heads/master by this push:
     new 7518bb2d Rocketmq demo (#584)
7518bb2d is described below

commit 7518bb2d4be90c54dd4df9c2b9fedbd8cd73fd22
Author: githublaohu <23...@qq.com>
AuthorDate: Mon Nov 21 09:52:19 2022 +0800

    Rocketmq demo (#584)
---
 dubbo-samples-rocketmq/README.md                   | 59 ++++++++++++++
 dubbo-samples-rocketmq/pom.xml                     | 90 ++++++++++++++++++++++
 .../dubbo/samples/rocketmq/RocketmqConsumer.java   | 36 +++++++++
 .../dubbo/samples/rocketmq/RocketmqProvider.java   | 36 +++++++++
 .../dubbo/samples/rocketmq/api/DemoService.java    | 26 +++++++
 .../samples/rocketmq/impl/DemoServiceImpl.java     | 36 +++++++++
 .../src/main/resources/log4j.properties            | 25 ++++++
 .../main/resources/spring/rocketmq-consumer.xml    | 44 +++++++++++
 .../main/resources/spring/rocketmq-provider.xml    | 40 ++++++++++
 pom.xml                                            |  8 +-
 10 files changed, 395 insertions(+), 5 deletions(-)

diff --git a/dubbo-samples-rocketmq/README.md b/dubbo-samples-rocketmq/README.md
new file mode 100644
index 00000000..225e0c0f
--- /dev/null
+++ b/dubbo-samples-rocketmq/README.md
@@ -0,0 +1,59 @@
+
+### 特性说明
+
+Dubbo 自 2.7.5 版本开始支持 RocketMQ 协议。RocketMQ协议是基于RocketMQ-功能进行通信,适合需要通信信息记录或则金融场景。
+
+1. [RokcetMQ基本兼容dubbo的原生dubbo协议与序列化协议[请点击]](https://dubbo.apache.org/zh/docs3-v2/java-sdk/reference-manual/protocol/dubbo/)
+2. [RocketMQ官方安装教程[请点击]](https://rocketmq.apache.org/zh/docs/quickStart/02quickstart)
+
+### 协议配置
+最简单配置
+```
+dubbo.registry.address=nameservice://{nameservice-address}
+dubbo.protocol.name=rocketmq
+```
+#### 配置注册中心
+
+因为RocketMQ的borker元数据都由RocketMQ管理组件name-service负责,所以RocketMQ协议的注册中心只能使用name-service
+因自动创建topic方式,在分布式集群下可能有问题,所以有自动创建topic与手动创建配置两种模式
+```
+dubbo.registry.address=nameservice://localhost:9876
+dubbo.registry.parameters.route=true  // 默认为true,自动创建topic,如果手动创建请设为false
+```
+
+
+#### Topic的命令规则以及分组细节
+
+topic创建规则有两种, 
+
+- topic模式:就是以topic区别version与group
+   - topic命名规则是:"providers-{serviceName}-{version}-{group}-{CRC32}"
+- select模式:使用RocketMQ的MessageSelector来区别version与group
+   - topic命名规则是:"providers-{serviceName}-{CRC32}"
+   - 注意:需要RocketMQ4.9.2以上版本才支持select模式
+
+| 字段 | 说明 |
+| --- | --- |
+| serviceName | 接口名 |
+| version | 版本号 |
+| group | 分组名 |
+| CRC32 | providers-{serviceName}-{version}-{group}或则providers-{serviceName} 的校验码,是用于防止在复杂情况下topic重复的问题 |
+
+
+```
+dubbo.protocol.parameters.groupModel=topic // topic 是第一种模式,参数为select 为第二种模式。
+```
+
+#### RocketMQ-Client配置
+生产端配置
+```
+dubbo.provider.parameters.enableMsgTrace=topic //Switch flag instance for message trace
+dubbo.provider.parameters.namespace=topic  //Namespace for this MQ Producer instance
+dubbo.provider.parameters.customizedTraceTopic=topic //The name value of message trace topic.If you don't config,you can use the default trace topic name
+```
+消费端配置
+```
+dubbo.consumer.parameters.enableMsgTrace=topic //Switch flag instance for message trace
+dubbo.consumer.parameters.namespace=topic  //Namespace for this MQ Producer instance
+dubbo.consumer.parameters.customizedTraceTopic=topic //The name value of message trace topic.If you don't config,you can use the default trace topic name
+```
\ No newline at end of file
diff --git a/dubbo-samples-rocketmq/pom.xml b/dubbo-samples-rocketmq/pom.xml
new file mode 100644
index 00000000..c9fd9ffe
--- /dev/null
+++ b/dubbo-samples-rocketmq/pom.xml
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
+	license agreements. See the NOTICE file distributed with this work for additional 
+	information regarding copyright ownership. The ASF licenses this file to 
+	You under the Apache License, Version 2.0 (the "License"); you may not use 
+	this file except in compliance with the License. You may obtain a copy of 
+	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
+	by applicable law or agreed to in writing, software distributed under the 
+	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
+	OF ANY KIND, either express or implied. See the License for the specific 
+	language governing permissions and limitations under the License. -->
+<project
+        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"
+        xmlns="http://maven.apache.org/POM/4.0.0">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>org.apache.dubbo</groupId>
+    <artifactId>dubbo-samples-rocketmq</artifactId>
+    <version>1.0-SNAPSHOT</version>
+    <name>dubbo-samples-rocketmq</name>
+    <properties>
+        <source.level>1.8</source.level>
+        <target.level>1.8</target.level>
+        <spring.version>4.3.16.RELEASE</spring.version>
+        <dubbo.version>3.0.7</dubbo.version>
+        <validation-api.version>1.1.0.Final</validation-api.version>
+        <hibernate-validator.version>4.2.0.Final</hibernate-validator.version>
+        <swagger.version>1.5.19</swagger.version>
+        <maven_checkstyle_version>3.0.0</maven_checkstyle_version>
+        <apache-rat-plugin.version>0.12</apache-rat-plugin.version>
+        <spring-boot.version>1.5.13.RELEASE</spring-boot.version>
+    </properties>
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.springframework</groupId>
+                <artifactId>spring-framework-bom</artifactId>
+                <version>${spring.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.dubbo</groupId>
+                <artifactId>dubbo-bom</artifactId>
+                <version>${dubbo.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>dubbo</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.dubbo.extensions</groupId>
+            <artifactId>dubbo-rpc-rocketmq</artifactId>
+            <version>1.0.3-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.dubbo.extensions</groupId>
+            <artifactId>dubbo-registry-nameservice</artifactId>
+            <version>1.0.3-SNAPSHOT</version>
+        </dependency>
+
+    </dependencies>
+
+
+    <repositories>
+        <repository>
+            <id>mvnrepository</id>
+            <name>mvnrepository</name>
+            <url>https://repository.apache.org</url>
+            <layout>default</layout>
+            <releases>
+                <enabled>true</enabled>
+            </releases>
+            <snapshots>
+                <enabled>true</enabled>
+            </snapshots>
+        </repository>
+    </repositories>
+
+
+</project>
diff --git a/dubbo-samples-rocketmq/src/main/java/org/apache/dubbo/samples/rocketmq/RocketmqConsumer.java b/dubbo-samples-rocketmq/src/main/java/org/apache/dubbo/samples/rocketmq/RocketmqConsumer.java
new file mode 100644
index 00000000..93f07860
--- /dev/null
+++ b/dubbo-samples-rocketmq/src/main/java/org/apache/dubbo/samples/rocketmq/RocketmqConsumer.java
@@ -0,0 +1,36 @@
+/*
+ *
+ *   Licensed to the Apache Software Foundation (ASF) under one or more
+ *   contributor license agreements.  See the NOTICE file distributed with
+ *   this work for additional information regarding copyright ownership.
+ *   The ASF licenses this file to You under the Apache License, Version 2.0
+ *   (the "License"); you may not use this file except in compliance with
+ *   the License.  You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+
+package org.apache.dubbo.samples.rocketmq;
+
+import org.apache.dubbo.samples.rocketmq.api.DemoService;
+
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+public class RocketmqConsumer {
+
+    public static void main(String[] args) throws Exception {
+        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring/rocketmq-consumer.xml");
+        context.start();
+
+        DemoService demoService = (DemoService) context.getBean("demoService");
+        String result = demoService.sayHello("world");
+        System.out.println(result);
+    }
+}
diff --git a/dubbo-samples-rocketmq/src/main/java/org/apache/dubbo/samples/rocketmq/RocketmqProvider.java b/dubbo-samples-rocketmq/src/main/java/org/apache/dubbo/samples/rocketmq/RocketmqProvider.java
new file mode 100644
index 00000000..54f87405
--- /dev/null
+++ b/dubbo-samples-rocketmq/src/main/java/org/apache/dubbo/samples/rocketmq/RocketmqProvider.java
@@ -0,0 +1,36 @@
+/*
+ *
+ *   Licensed to the Apache Software Foundation (ASF) under one or more
+ *   contributor license agreements.  See the NOTICE file distributed with
+ *   this work for additional information regarding copyright ownership.
+ *   The ASF licenses this file to You under the Apache License, Version 2.0
+ *   (the "License"); you may not use this file except in compliance with
+ *   the License.  You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+
+package org.apache.dubbo.samples.rocketmq;
+
+import java.util.concurrent.CountDownLatch;
+
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+public class RocketmqProvider {
+
+    public static void main(String[] args) throws Exception {
+        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring/rocketmq-provider.xml");
+        context.start();
+
+        System.out.println("dubbo service started");
+        new CountDownLatch(1).await();
+    }
+
+}
diff --git a/dubbo-samples-rocketmq/src/main/java/org/apache/dubbo/samples/rocketmq/api/DemoService.java b/dubbo-samples-rocketmq/src/main/java/org/apache/dubbo/samples/rocketmq/api/DemoService.java
new file mode 100644
index 00000000..fbeb1dfe
--- /dev/null
+++ b/dubbo-samples-rocketmq/src/main/java/org/apache/dubbo/samples/rocketmq/api/DemoService.java
@@ -0,0 +1,26 @@
+/*
+ *
+ *   Licensed to the Apache Software Foundation (ASF) under one or more
+ *   contributor license agreements.  See the NOTICE file distributed with
+ *   this work for additional information regarding copyright ownership.
+ *   The ASF licenses this file to You under the Apache License, Version 2.0
+ *   (the "License"); you may not use this file except in compliance with
+ *   the License.  You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+
+package org.apache.dubbo.samples.rocketmq.api;
+
+public interface DemoService {
+
+    String sayHello(String name);
+
+}
diff --git a/dubbo-samples-rocketmq/src/main/java/org/apache/dubbo/samples/rocketmq/impl/DemoServiceImpl.java b/dubbo-samples-rocketmq/src/main/java/org/apache/dubbo/samples/rocketmq/impl/DemoServiceImpl.java
new file mode 100644
index 00000000..3c9c88d9
--- /dev/null
+++ b/dubbo-samples-rocketmq/src/main/java/org/apache/dubbo/samples/rocketmq/impl/DemoServiceImpl.java
@@ -0,0 +1,36 @@
+/*
+ *
+ *   Licensed to the Apache Software Foundation (ASF) under one or more
+ *   contributor license agreements.  See the NOTICE file distributed with
+ *   this work for additional information regarding copyright ownership.
+ *   The ASF licenses this file to You under the Apache License, Version 2.0
+ *   (the "License"); you may not use this file except in compliance with
+ *   the License.  You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+
+package org.apache.dubbo.samples.rocketmq.impl;
+
+import org.apache.dubbo.rpc.RpcContext;
+import org.apache.dubbo.samples.rocketmq.api.DemoService;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+public class DemoServiceImpl implements DemoService {
+
+    public String sayHello(String name) {
+        System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] Hello " + name +
+            ", request from consumer: " + RpcContext.getContext().getRemoteAddress());
+        return "Hello " + name + ", response from provider: " + RpcContext.getContext().getLocalAddress();
+    }
+
+}
diff --git a/dubbo-samples-rocketmq/src/main/resources/log4j.properties b/dubbo-samples-rocketmq/src/main/resources/log4j.properties
new file mode 100644
index 00000000..e976f5c2
--- /dev/null
+++ b/dubbo-samples-rocketmq/src/main/resources/log4j.properties
@@ -0,0 +1,25 @@
+#
+#
+#   Licensed to the Apache Software Foundation (ASF) under one or more
+#   contributor license agreements.  See the NOTICE file distributed with
+#   this work for additional information regarding copyright ownership.
+#   The ASF licenses this file to You under the Apache License, Version 2.0
+#   (the "License"); you may not use this file except in compliance with
+#   the License.  You may obtain a copy of the License at
+#  
+#       http://www.apache.org/licenses/LICENSE-2.0
+#  
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#   See the License for the specific language governing permissions and
+#   limitations under the License.
+#  
+#
+###set log levels###
+log4j.rootLogger=info, stdout
+###output to the console###
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.Target=System.out
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=[%d{dd/MM/yy hh:mm:ss:sss z}] %t %5p %c{2}: %m%n
\ No newline at end of file
diff --git a/dubbo-samples-rocketmq/src/main/resources/spring/rocketmq-consumer.xml b/dubbo-samples-rocketmq/src/main/resources/spring/rocketmq-consumer.xml
new file mode 100644
index 00000000..730510fe
--- /dev/null
+++ b/dubbo-samples-rocketmq/src/main/resources/spring/rocketmq-consumer.xml
@@ -0,0 +1,44 @@
+<!--
+  ~
+  ~   Licensed to the Apache Software Foundation (ASF) under one or more
+  ~   contributor license agreements.  See the NOTICE file distributed with
+  ~   this work for additional information regarding copyright ownership.
+  ~   The ASF licenses this file to You under the Apache License, Version 2.0
+  ~   (the "License"); you may not use this file except in compliance with
+  ~   the License.  You may obtain a copy of the License at
+  ~
+  ~       http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~   Unless required by applicable law or agreed to in writing, software
+  ~   distributed under the License is distributed on an "AS IS" BASIS,
+  ~   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~   See the License for the specific language governing permissions and
+  ~   limitations under the License.
+  ~
+  -->
+
+<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
+       xmlns:context="http://www.springframework.org/schema/context"
+       xmlns="http://www.springframework.org/schema/beans"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+       http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
+    <context:property-placeholder/>
+
+    <dubbo:application name="rocketmq-consumer"/>
+
+    <dubbo:registry address="nameservice://localhost:9876">
+        <dubbo:parameter key="route" value="falsee"/>
+    </dubbo:registry>
+
+    <dubbo:protocol name="rocketmq" id="rocketmq">
+        <dubbo:parameter key="groupModel" value="topic"/>
+    </dubbo:protocol>
+
+    <dubbo:consumer>
+        <dubbo:parameter key="groupModel" value="topic"/>
+    </dubbo:consumer>
+
+    <dubbo:reference id="demoService"
+                     interface="org.apache.dubbo.samples.rocketmq.api.DemoService" protocol="rocketmq"/>
+</beans>
diff --git a/dubbo-samples-rocketmq/src/main/resources/spring/rocketmq-provider.xml b/dubbo-samples-rocketmq/src/main/resources/spring/rocketmq-provider.xml
new file mode 100644
index 00000000..26030ba3
--- /dev/null
+++ b/dubbo-samples-rocketmq/src/main/resources/spring/rocketmq-provider.xml
@@ -0,0 +1,40 @@
+<!--
+  ~
+  ~   Licensed to the Apache Software Foundation (ASF) under one or more
+  ~   contributor license agreements.  See the NOTICE file distributed with
+  ~   this work for additional information regarding copyright ownership.
+  ~   The ASF licenses this file to You under the Apache License, Version 2.0
+  ~   (the "License"); you may not use this file except in compliance with
+  ~   the License.  You may obtain a copy of the License at
+  ~
+  ~       http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~   Unless required by applicable law or agreed to in writing, software
+  ~   distributed under the License is distributed on an "AS IS" BASIS,
+  ~   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~   See the License for the specific language governing permissions and
+  ~   limitations under the License.
+  ~
+  -->
+
+<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
+       xmlns:context="http://www.springframework.org/schema/context" xmlns="http://www.springframework.org/schema/beans"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+       http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
+    <context:property-placeholder/>
+
+    <dubbo:application name="rocketmq-provider"/>
+
+    <dubbo:registry address="nameservice://localhost:9876">
+        <dubbo:parameter key="route" value="false"/>
+    </dubbo:registry>
+
+    <dubbo:protocol name="rocketmq" id="rocketmq">
+        <dubbo:parameter key="groupModel" value="topic"/>
+    </dubbo:protocol>
+
+    <bean id="demoService" class="org.apache.dubbo.samples.rocketmq.impl.DemoServiceImpl"/>
+
+    <dubbo:service interface="org.apache.dubbo.samples.rocketmq.api.DemoService" ref="demoService" protocol="rocketmq"/>
+</beans>
diff --git a/pom.xml b/pom.xml
index 68cb4beb..6807b3cb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,10 +14,7 @@
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-  -->
-<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">
+  --><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">
     <modelVersion>4.0.0</modelVersion>
 
     <groupId>org.apache.dubbo</groupId>
@@ -94,6 +91,7 @@
         <module>dubbo-samples-xds</module>
         <module>dubbo-samples-spring-boot</module>
         <module>dubbo-samples-triple-reactor</module>
+        <module>dubbo-samples-rocketmq</module>
         <module>dubbo-samples-port-unification</module>
     </modules>
 
@@ -112,4 +110,4 @@
             </snapshots>
         </repository>
     </repositories>
-</project>
+</project>
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@dubbo.apache.org
For additional commands, e-mail: notifications-help@dubbo.apache.org