demo github 地址

0、docker 启动 zk

docker-compose.yml

version: '3'services:  zoo1:    image: zookeeper    restart: always    hostname: zoo1    ports:      - 2181:2181
docker-compose up -d

1、创立父 pom

<?xml version="1.0" encoding="UTF-8"?><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>com.csp</groupId>    <artifactId>dubbo-exam</artifactId>    <packaging>pom</packaging>    <version>1.0-SNAPSHOT</version>    <modules>        <module>dubbo-api</module>        <module>dubbo-provider</module>        <module>dubbo-consumer</module>    </modules>    <dependencyManagement>        <dependencies>            <dependency>                <groupId>com.101tec</groupId>                <artifactId>zkclient</artifactId>                <version>0.10</version>            </dependency>            <dependency>                <groupId>org.apache.zookeeper</groupId>                <artifactId>zookeeper</artifactId>                <version>3.4.13</version>                <type>pom</type>                <exclusions>                    <exclusion>                        <groupId>org.slf4j</groupId>                        <artifactId>slf4j-log4j12</artifactId>                    </exclusion>                </exclusions>            </dependency>            <dependency>                <groupId>org.apache.curator</groupId>                <artifactId>curator-recipes</artifactId>                <version>2.8.0</version>            </dependency>            <dependency>                <groupId>org.apache.dubbo</groupId>                <artifactId>dubbo-spring-boot-starter</artifactId>                <version>2.7.7</version>                <exclusions>                    <exclusion>                        <groupId>org.slf4j</groupId>                        <artifactId>slf4j-log4j12</artifactId>                    </exclusion>                </exclusions>            </dependency>            <dependency>                <groupId>org.apache.dubbo</groupId>                <artifactId>dubbo</artifactId>                <version>2.7.7</version>            </dependency>            <dependency>                <groupId>org.apache.curator</groupId>                <artifactId>curator-framework</artifactId>                <version>4.0.1</version>            </dependency>        </dependencies>    </dependencyManagement></project>

2、创立 API maven 工程

package com.csp.dubbo.demo;public interface TestApiService {    String sayHello(String name);}

3、创立 Provider maven 工程

pom.xml

<?xml version="1.0" encoding="UTF-8"?><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">    <parent>        <artifactId>dubbo-exam</artifactId>        <groupId>com.csp</groupId>        <version>1.0-SNAPSHOT</version>    </parent>    <modelVersion>4.0.0</modelVersion>    <artifactId>dubbo-provider</artifactId>    <dependencies>        <dependency>            <groupId>com.csp</groupId>            <artifactId>dubbo-api</artifactId>            <version>1.0-SNAPSHOT</version>        </dependency>        <dependency>            <groupId>com.101tec</groupId>            <artifactId>zkclient</artifactId>        </dependency>        <dependency>            <groupId>org.apache.curator</groupId>            <artifactId>curator-recipes</artifactId>        </dependency>        <dependency>            <groupId>org.apache.dubbo</groupId>            <artifactId>dubbo-spring-boot-starter</artifactId>        </dependency>        <dependency>            <groupId>org.apache.dubbo</groupId>            <artifactId>dubbo</artifactId>        </dependency>        <dependency>            <groupId>org.apache.curator</groupId>            <artifactId>curator-framework</artifactId>        </dependency>    </dependencies></project>

dubbo-provider.properties

dubbo.application.name=dubbo-demo-annotation-providerdubbo.protocol.name=dubbodubbo.protocol.port=20880

dubbo-provider.properties

###set log levels###log4j.rootLogger=info, stdout###output to the console###log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target=System.outlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=[%d{dd/MM/yy HH:mm:ss:SSS z}] %t %5p %c{2}: %m%n

Application

package com.csp.dubbo.demo.provider;import java.io.IOException;import org.apache.dubbo.config.RegistryConfig;import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;import org.springframework.context.annotation.AnnotationConfigApplicationContext;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.PropertySource;public class Application {    public static void main(String[] args) throws IOException {        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ProviderConfiguration.class);        context.start();        System.in.read();    }    @Configuration    @EnableDubbo(scanBasePackages = "com.csp.dubbo.demo.provider.impl")    @PropertySource("classpath:dubbo-provider.properties")    static class ProviderConfiguration {        @Bean        public RegistryConfig registryConfig() {            RegistryConfig registryConfig = new RegistryConfig();            registryConfig.setAddress("zookeeper://127.0.0.1:2181");            return registryConfig;        }    }}

TestApiServiceImpl

package com.csp.dubbo.demo.provider.impl;import com.csp.dubbo.demo.TestApiService;import org.apache.dubbo.config.annotation.DubboService;@DubboService(version = "1.0.0", interfaceClass = TestApiService.class)public class TestApiServiceImpl implements TestApiService {    public String sayHello(String name) {        System.out.println("我是 provider, 我被调用了");        return name + " say hello";    }}

4、创立 Provider maven 工程

pom.xml

<?xml version="1.0" encoding="UTF-8"?><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">    <parent>        <artifactId>dubbo-exam</artifactId>        <groupId>com.csp</groupId>        <version>1.0-SNAPSHOT</version>    </parent>    <modelVersion>4.0.0</modelVersion>    <artifactId>dubbo-consumer</artifactId>    <dependencies>        <dependency>            <groupId>com.csp</groupId>            <artifactId>dubbo-api</artifactId>            <version>1.0-SNAPSHOT</version>        </dependency>        <dependency>            <groupId>com.101tec</groupId>            <artifactId>zkclient</artifactId>            <exclusions>                <exclusion>                    <groupId>org.slf4j</groupId>                    <artifactId>slf4j-log4j12</artifactId>                </exclusion>            </exclusions>        </dependency>        <dependency>            <groupId>org.apache.curator</groupId>            <artifactId>curator-recipes</artifactId>        </dependency>        <dependency>            <groupId>org.apache.dubbo</groupId>            <artifactId>dubbo-spring-boot-starter</artifactId>        </dependency>        <dependency>            <groupId>org.apache.dubbo</groupId>            <artifactId>dubbo</artifactId>        </dependency>        <dependency>            <groupId>org.apache.curator</groupId>            <artifactId>curator-framework</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>    </dependencies>    <dependencyManagement>        <dependencies>            <dependency>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-starter-parent</artifactId>                <version>2.1.7.RELEASE</version>                <type>pom</type>                <scope>import</scope>            </dependency>        </dependencies>    </dependencyManagement></project>

application.properties

#spring我的项目名spring.application.name=dubbo_auto_configuration_consumer_demo#Dubbo provider configurationdubbo.application.name=dubbo_consumerdubbo.registry.protocol=zookeeperdubbo.registry.address=zookeeper://127.0.0.1:2181server.port=8082

log4j.properties

###set log levels###log4j.rootLogger=info, stdout###output to the console###log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target=System.outlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=[%d{dd/MM/yy HH:mm:ss:SSS z}] %t %5p %c{2}: %m%n

Application

package com.csp.dubbo.demo.consumer;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class Application {    public static void main(String[] args) {        SpringApplication.run(Application.class);    }}

TestController

package com.csp.dubbo.demo.consumer.controller;import com.csp.dubbo.demo.Test2Service;import com.csp.dubbo.demo.TestApiService;import org.apache.dubbo.config.annotation.DubboReference;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class TestController {    @DubboReference(version = "1.0.0")    TestApiService testApiService;    @GetMapping("/sayHello")    public Object sayHello(String name) {        String hello = testApiService.sayHello(name);        return hello;    }}

5、总结

  1. 整体思路是将 web 相干的 maven 依赖从父 pom 中抽离进去,独自放到 consumer 中
  2. dubbo 应用的日志的依赖是 slf4j-log4j12,spring boot 默认应用的是 logback-classic。二者有抵触,在笔者我的项目中,抉择去除掉了 slf4j-log4j12