• dubbo user guider笔记之二Quick start


    Quick start

    这个章节较为简单,不过我们作为初学者,最好动手敲一下。加深我们对整个流程和结构的理解。

    使用Dubbo最普遍的方式是在spring框架中运行它。接下来的内容将引导你使用spring的xml配置的方式来开发一个Dubbo应用。当然也可以使用API配置的方式。

    Service provider

    Defining service interfaces

    DemoService.java :

    package org.apache.dubbo.demo;
    
    public interface DemoService {
        String sayHello(String name);
    
    }
    

    The project structure should look like this:

    .
    ├── dubbo-demo-api
    │   ├── pom.xml
    │   └── src
    │       └── main
    │           └── java
    │               └── org
    │                   └── apache
    │                       └── dubbo
    │                           └── demo
    │                               └── DemoService.java
    

    Implement interface in service provider

    DemoServiceImpl.java :

    package org.apache.dubbo.demo.provider;
    import org.apache.dubbo.demo.DemoService;
    
    public class DemoServiceImpl implements DemoService {
        public String sayHello(String name) {
            return "Hello " + name;
        }
    }
    

    Exposing service with Spring configuration

    provider.xml:

    <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
           xmlns="http://www.springframework.org/schema/beans"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
           http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
    
        <!-- provider's application name, used for tracing dependency relationship -->
        <dubbo:application name="demo-provider"/>
        <!-- use multicast registry center to export service -->
        <dubbo:registry address="multicast://224.5.6.7:1234"/>
        <!-- use dubbo protocol to export service on port 20880 -->
        <dubbo:protocol name="dubbo" port="20880"/>
        <!-- service implementation, as same as regular local bean -->
        <bean id="demoService" class="org.apache.dubbo.demo.provider.DemoServiceImpl"/>
        <!-- declare the service interface to be exported -->
        <dubbo:service interface="org.apache.dubbo.demo.DemoService" ref="demoService"/>
    </beans>
    

    这个demo使用了简单的多播作为注册中心

    Configure the logging system

    Dubbo默认使用log4j作为日志系统,它也支持 slf4j, Apache Commons Logging, and JUL logging.
    简单配置如下:
    log4j.properties

    ###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
    

    Bootstrap the service provider

    Provider.java

    package org.apache.dubbo.demo.provider;
    
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class Provider {
    
        public static void main(String[] args) throws Exception {
            System.setProperty("java.net.preferIPv4Stack", "true");
            ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/dubbo-demo-provider.xml"});
            context.start();
            System.out.println("Provider started.");
            System.in.read(); // press any key to exit
        }
    }
    

    Finally, the project structure should look like this:

    ├── dubbo-demo-provider
    │   ├── pom.xml
    │   └── src
    │       └── main
    │           ├── java
    │           │   └── org
    │           │       └── apache
    │           │           └── dubbo
    │           │               └── demo
    │           │                   └── provider
    │           │                       ├── DemoServiceImpl.java
    │           │                       └── Provider.java
    │           └── resources
    │               ├── META-INF
    │               │   └── spring
    │               │       └── dubbo-demo-provider.xml
    │               └── log4j.properties
    

    Service consumer

    Using the Spring configuration to reference a remote service

    consumer.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
           xmlns="http://www.springframework.org/schema/beans"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
           http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
    
        <!-- consumer's application name, used for tracing dependency relationship (not a matching criterion),
        don't set it same as provider -->
        <dubbo:application name="demo-consumer"/>
        <!-- use multicast registry center to discover service -->
        <dubbo:registry address="multicast://224.5.6.7:1234"/>
        <!-- generate proxy for the remote service, then demoService can be used in the same way as the
        local regular interface -->
        <dubbo:reference id="demoService" check="false" interface="org.apache.dubbo.demo.DemoService"/>
    </beans>
    

    Bootstrap the consumer

    Consumer.java :

    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import org.apache.dubbo.demo.DemoService;
     
    public class Consumer {
        public static void main(String[] args) throws Exception {
            ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"META-INF/spring/dubbo-demo-consumer.xml"});
            context.start();
            // Obtaining a remote service proxy
            DemoService demoService = (DemoService)context.getBean("demoService");
            // Executing remote methods
            String hello = demoService.sayHello("world");
            // Display the call result
            System.out.println(hello);
        }
    }
    

    Config the logging system

    This is the same as how to config it on provider side.

    Finally, the project structure should be look like this:

    ├── dubbo-demo-consumer
    │   ├── pom.xml
    │   └── src
    │       └── main
    │           ├── java
    │           │   └── org
    │           │       └── apache
    │           │           └── dubbo
    │           │               └── demo
    │           │                   └── consumer
    │           │                       └── Consumer.java
    │           └── resources
    │               ├── META-INF
    │               │   └── spring
    │               │       └── dubbo-demo-consumer.xml
    │               └── log4j.properties
    

    Start the demo

    Start service provider

    Run the org.apache.dubbo.demo.provider.Provider class to start the provider.

    Start service consumer

    Run the org.apache.dubbo.demo.provider.Consumer class to start the consumer, and you should be able to see the following result:

    Hello world

  • 相关阅读:
    Dapper笔记-Dapper.Common【转】
    ASP.Net Core WebApi几种版本控制对比【转】
    ASP.NET Core WebAPI使用Swagger生成文档
    K8S笔记-Pod介绍【未完成】
    Docker-容器命令
    MySQL笔记-备份命令(mysqldump)
    MySQL笔记-INFORMATION_SCHEMA数据库介绍【转】
    Quartz.net笔记-计划任务触发器(Cron Trigger)
    Quartz.net笔记-简单触发器(Simple Trigger)
    Type序列化器
  • 原文地址:https://www.cnblogs.com/po-shi/p/11238512.html
Copyright © 2020-2023  润新知