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-website.git


The following commit(s) were added to refs/heads/master by this push:
     new fa15393047 add dubbo3.0.8 1-demo blog (#1311)
fa15393047 is described below

commit fa15393047723310a70328323ee22c54756385a4
Author: songxiaosheng <[email protected]>
AuthorDate: Mon Aug 1 13:04:05 2022 +0800

    add dubbo3.0.8 1-demo blog (#1311)
    
    * add dubbo3.0.8 1-demo blog
    
    * add dubbo3.0.8 1-demo blog
    
    * add authro
    
    * add author
    
    * remove author path
---
 .../blog/java/codeanalysis/1-learn-from-a-demo.md  | 121 +++++++++++++++++++++
 static/imgs/blog/source-blog/1-zookeeper-data.png  | Bin 0 -> 402843 bytes
 static/imgs/blog/source-blog/1-zookeeper.png       | Bin 0 -> 326294 bytes
 3 files changed, 121 insertions(+)

diff --git a/content/zh/blog/java/codeanalysis/1-learn-from-a-demo.md 
b/content/zh/blog/java/codeanalysis/1-learn-from-a-demo.md
new file mode 100644
index 0000000000..77e813c1cc
--- /dev/null
+++ b/content/zh/blog/java/codeanalysis/1-learn-from-a-demo.md
@@ -0,0 +1,121 @@
+---
+title: "01 从一个服务提供者的Demo说起"
+linkTitle: "源码解析01 从一个服务提供者的Demo说起"
+date: 2022-7-30
+author: 宋小生
+description: >
+    [Dubbo 3.0.8源码解析] 为了更方便了解Dubbo提供者原理,我们先来编写一个Demo,从例子中来看源码实现
+---
+
+# 1 从一个服务提供者的Demo说起
+
+为了更方便了解原理,我们先来编写一个Demo,从例子中来看源码实现:
+
+## 1.1 启动Zookeeper
+
+为了Demo可以正常启动,需要我们先在本地启动一个Zookeeper如下图所示:
+![在这里插入图片描述](/imgs/admin/blog/source-blog/1-zookeeper.png)
+
+
+## 1.2 服务提供者
+接下来给大家贴一下示例源码,这个源码来源于Dubbo源码目录的        dubbo-demo/dubbo-demo-api 
目录下面的dubbo-demo-api-provider子项目,这里我做了删减,方便看核心代码:
+首先我们定义一个服务接口如下所示:
+
+```java
+import java.util.concurrent.CompletableFuture;
+public interface DemoService {
+    /**
+     * 同步处理的服务方法
+     * @param name
+     * @return
+     */
+    String sayHello(String name);
+
+    /**
+     * 用于异步处理的服务方法
+     * @param name
+     * @return
+     */
+    default CompletableFuture<String> sayHelloAsync(String name) {
+        return CompletableFuture.completedFuture(sayHello(name));
+    }
+}
+
+服务实现类如下:
+
+import org.apache.dubbo.rpc.RpcContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.concurrent.CompletableFuture;
+
+public class DemoServiceImpl implements DemoService {
+    private static final Logger logger = 
LoggerFactory.getLogger(DemoServiceImpl.class);
+
+    @Override
+    public String sayHello(String name) {
+        logger.info("Hello " + name + ", request from consumer: " + 
RpcContext.getServiceContext().getRemoteAddress());
+        return "Hello " + name + ", response from provider: " + 
RpcContext.getServiceContext().getLocalAddress();
+    }
+
+    @Override
+    public CompletableFuture<String> sayHelloAsync(String name) {
+        return null;
+    }
+
+}
+```
+
+## 1.3 启用服务
+有了服务接口之后我们来启用服务,启用服务的源码如下:
+
+```java
+import org.apache.dubbo.common.constants.CommonConstants;
+import org.apache.dubbo.config.ApplicationConfig;
+import org.apache.dubbo.config.MetadataReportConfig;
+import org.apache.dubbo.config.ProtocolConfig;
+import org.apache.dubbo.config.RegistryConfig;
+import org.apache.dubbo.config.ServiceConfig;
+import org.apache.dubbo.config.bootstrap.DubboBootstrap;
+import org.apache.dubbo.demo.DemoService;
+
+public class Application {
+    public static void main(String[] args) throws Exception {
+            startWithBootstrap();
+    }
+    private static void startWithBootstrap() {
+        ServiceConfig<DemoServiceImpl> service = new ServiceConfig<>();
+        service.setInterface(DemoService.class);
+        service.setRef(new DemoServiceImpl());
+        DubboBootstrap bootstrap = DubboBootstrap.getInstance();
+        bootstrap.application(new ApplicationConfig("dubbo-demo-api-provider"))
+            .registry(new RegistryConfig("zookeeper://127.0.0.1:2181"))
+            .protocol(new ProtocolConfig(CommonConstants.DUBBO, -1))
+            .service(service)
+            .start()
+            .await();
+    }
+}
+```
+
+## 1.4 启用服务后写入Zookeeper的节点数据
+启动服务,这个时候我们打开Zookeeper图形化客户端来看看这个服务在Zookeeper上面写入来哪些数据,如下图:
+![在这里插入图片描述](/imgs/admin/blog/source-blog/1-zookeeper-data.png)
+写入Zookeper上的节点用于服务在分布式场景下的协调,这些节点是比较重要的。
+
+如果了解过Dubbo的同学,应该会知道Dubbo在低版本的时候会向注册中心中写入服务接口,具体路径在上面的  **dubbo目录下**  ,然后在 
**/dubbo/服务接口/** 路径下写入如下信息:
+* **服务提供者**配置信息URL形式
+* **服务消费者**的配置信息URL形式
+* 服务**路由信息**
+* **配置信息**
+
+上面这个图就是Dubbo3的注册信息了,后面我们也会围绕细节来说明下,这里可以看下新增了:
+* /dubbo/metadata **元数据信息**
+* /dubbo/mapping 服务和应用的**映射信息** 
+* /dubbo/config **注册中心配置** 
+ * /services目录**应用信息** 
+
+在这里可以大致了解下,在后面会有更详细的源码解析这个示例代码.通过透析代码来看透Dubbo3服务注册原理,服务提供原理。
+
+
+原文: 
[<<从一个服务提供者的Demo说起>>]([https//blog.elastic.link](https://blog.elastic.link/2022/07/10/dubbo/1-cong-yi-ge-demo-shuo-qi/))
diff --git a/static/imgs/blog/source-blog/1-zookeeper-data.png 
b/static/imgs/blog/source-blog/1-zookeeper-data.png
new file mode 100644
index 0000000000..740cb1b4ad
Binary files /dev/null and b/static/imgs/blog/source-blog/1-zookeeper-data.png 
differ
diff --git a/static/imgs/blog/source-blog/1-zookeeper.png 
b/static/imgs/blog/source-blog/1-zookeeper.png
new file mode 100644
index 0000000000..d7ea03a1e5
Binary files /dev/null and b/static/imgs/blog/source-blog/1-zookeeper.png differ

Reply via email to