zoukankan      html  css  js  c++  java
  • Dubbo2.7.3入门

    2.7.X的Dubbo,包名不再是com.alibaba,而是org.apache

    先看工程目录结构

    一个公共api模块,一个SpringBoot项目充当Dubbo服务,一个SpringBoot项目充当服务消费者。

    代码

    父项目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">
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.6.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.demo</groupId>
        <artifactId>dubbo-2.7.3</artifactId>
        <packaging>pom</packaging>
        <version>1.0-SNAPSHOT</version>
        <modules>
            <module>dubbo-api</module>
            <module>dubbo-service</module>
            <module>dubbo-consumer</module>
        </modules>
    
        <properties>
            <java.version>1.8</java.version>
            <dubbo.version>2.7.3</dubbo.version>
            <!--如果curator版本与zookeeper不对应,会报错:KeeperErrorCode = Unimplemented for /dubbo/com.demo.common.HelloService-->
            <curator.version>2.13.0</curator.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo</artifactId>
                <version>${dubbo.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
                <version>${dubbo.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.curator</groupId>
                <artifactId>curator-framework</artifactId>
                <version>${curator.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.curator</groupId>
                <artifactId>curator-recipes</artifactId>
                <version>${curator.version}</version>
            </dependency>
            <dependency>
                <groupId>io.netty</groupId>
                <artifactId>netty-all</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
        </dependencies>
    
    </project>
    

      

    api模块

    只是提供了一个公共的服务接口

    package com.demo.common;
    
    
    public interface HelloService {
        String hello();
    }

    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">
        <parent>
            <artifactId>dubbo-2.7.3</artifactId>
            <groupId>com.demo</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
        <artifactId>dubbo-api</artifactId>
    </project>
    

      

    Dubbo服务模块

    主要提供服务实现

    package com.demo.dubboservice.service.impl;
    
    import com.demo.common.HelloService;
    import org.apache.dubbo.config.annotation.Service;
    
    
    /**
     *  建议由服务提供方设置超时,在 Provider 上尽量多配置 Consumer 端属性
     *  timeout 方法调用超时
     *  retries 失败重试次数,缺省是 2 [2]
     *  loadbalance 负载均衡算法 [3],缺省是随机 random。还可以有轮询 roundrobin、最不活跃优先 [4] leastactive 等
     *  actives 消费者端,最大并发调用限制,即当 Consumer 对一个服务的并发调用到上限后,新调用会阻塞直到超时
     */
    @Service(registry = "dubboRegistry", timeout = 3000, version = "1.0", retries = 3, loadbalance = "random", actives = 5)
    public class HelloServiceImpl implements HelloService {
        @Override
        public String hello() {
            return "动物园里有大西几! 小凶许! 小脑斧! 梅发怒!";
        }
    }

    application.properties

    spring.application.name=service-provider
    server.port=9999
    spring.main.allow-bean-definition-overriding=true
    
    # Dubbo Application
    # The default value of dubbo.application.name is ${spring.application.name}
    # dubbo.application.name=${spring.application.name}
    
    # 扫描dubbo服务(@Service.. @Reference..)
    dubbo.scan.basePackages=com.demo.dubboservice.service.impl
    
    # 通信协议
    dubbo.protocol.id = dubbo
    dubbo.protocol.name = dubbo
    dubbo.protocol.port = 20880
    
    # 注册中心
    dubbo.registry.id = dubboRegistry
    dubbo.registry.timeout=5000
    dubbo.registry.address=zookeeper://127.0.0.1:2181
    # Dubbo 支持 zkclient 和 curator 两种 Zookeeper 客户端实现:在2.7.x的版本中已经移除了zkclient的实现,如果要使用zkclient客户端,需要自行拓展
    dubbo.registry.client=curator
    # 元数据地址
    dubbo.metadata-report.address=zookeeper://127.0.0.1:2181
    

      

    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">
    	<parent>
    		<artifactId>dubbo-2.7.3</artifactId>
    		<groupId>com.demo</groupId>
    		<version>1.0-SNAPSHOT</version>
    	</parent>
    
    	<modelVersion>4.0.0</modelVersion>
    
    	<artifactId>dubbo-service</artifactId>
    	<name>dubbo-service</name>
    	<description>Demo project for Spring Boot</description>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>com.demo</groupId>
                <artifactId>dubbo-api</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.springframework.boot</groupId>
    				<artifactId>spring-boot-maven-plugin</artifactId>
    			</plugin>
    		</plugins>
    	</build>
    
    </project>
    

      

    服务消费者模块

    调用dubbo服务,提供前端接口

    package com.demo.dubboconsumer.controller;
    
    import com.demo.common.HelloService;
    import org.apache.dubbo.config.annotation.Reference;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class HelloController {
        @Reference(version = "1.0")
        private HelloService helloService;
    
        @RequestMapping("/hello")
        public String hello(){
            return helloService.hello();
        }
    }

    application.properties

    spring.application.name=dubbo-consumer
    server.port=9990
    spring.main.allow-bean-definition-overriding=true
    
    # Dubbo Application
    # The default value of dubbo.application.name is ${spring.application.name}
    # dubbo.application.name=${spring.application.name}
    
    # 扫描dubbo服务(@Service.. @Reference..)
    dubbo.scan.basePackages=com.demo.dubboconsumer.controller
    
    # 通信协议
    dubbo.protocol.id=dubbo
    dubbo.protocol.name=dubbo
    dubbo.protocol.port=20880
    
    # 注册中心
    dubbo.registry.id=dubboRegistry
    dubbo.registry.timeout=5000
    dubbo.registry.address=zookeeper://127.0.0.1:2181
    dubbo.registry.client=curator
    # 元数据地址
    dubbo.metadata-report.address=zookeeper://127.0.0.1:2181
    

      

    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">
    	<parent>
    		<artifactId>dubbo-2.7.3</artifactId>
    		<groupId>com.demo</groupId>
    		<version>1.0-SNAPSHOT</version>
    	</parent>
    
    	<modelVersion>4.0.0</modelVersion>
    
    	<artifactId>dubbo-consumer</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    	<name>dubbo-consumer</name>
    	<description>Demo project for Spring Boot</description>
    
    	<dependencies>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web</artifactId>
    		</dependency>
    
            <dependency>
                <groupId>com.demo</groupId>
                <artifactId>dubbo-api</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
    
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-test</artifactId>
    			<scope>test</scope>
    		</dependency>
    	</dependencies>
    
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.springframework.boot</groupId>
    				<artifactId>spring-boot-maven-plugin</artifactId>
    			</plugin>
    		</plugins>
    	</build>
    
    </project>
    

      

    代码搞定,又出了个新问题

    为什么呢,因为中央仓库里还没有2.7.3版本的依赖,等有了就不会出现这个问题了(这里就要吐槽一下,Dubbo-SpringBoot-Starter项目与Dubbo项目的版本不同步有点尴尬)

    临时解决,去GitHub上下载2.7.3的源码,然后本地install。

    解压缩,然后进入根目录,执行 mvn install -Dmaven.test.skip=true

    启动

    先在本地启动一个3.4.X的zookeeper(去官网下载,然后复制conf里的zoo_sample.cfg,重命名zoo.cfg,即可启动),然后先后启动Dubbo服务以及消费者项目

    访问

    如果你启动Dubbo管控台(注:最好是最新版),可以看见Dubbo服务

    访问 http://localhost:8080/#/

     

    点击查看【详情】,在最后有个元数据信息,这与前面配置的【元数据地址】是相关联的。

    源码地址:https://github.com/Mysakura/dubbo-2.7.3-demo

  • 相关阅读:
    MapServer:地图发布工具
    hdu1054(二分图匹配)
    hdu 5091(线段树+扫描线)
    hdu1828(线段树+扫描线)
    hdu2847(暴力)
    hdu1052(田忌赛马 贪心)
    hdu1051(LIS | Dilworth定理)
    hdu1050(贪心)
    poj 2773(容斥原理)
    hdu 1044(bfs+状压)
  • 原文地址:https://www.cnblogs.com/LUA123/p/11189634.html
Copyright © 2011-2022 走看看