美文网首页
深入学习java笔记-16.SpringBoot2.1之Dubb

深入学习java笔记-16.SpringBoot2.1之Dubb

作者: 笨鸡 | 来源:发表于2019-05-09 18:03 被阅读0次

1.搭建并开启zookeeper集群

搭建开启zookeeper集群.png

2.下载dubbo-admin控制台

下载地址: https://github.com/apache/incubator-dubbo-admin

前提安装了node.js
cd D:\IdeaProjects\incubator-dubbo-admin
更改application.properties zookeeper 的IP地址
mvn clean package
mvn --projects dubbo-admin-server spring-boot:run

访问链接: http://localhost:8080

dubbo-admin.png

3.目录结构

dubbo-service.png

4.各类文件

dubbo-service-project 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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.ctgu</groupId>
    <artifactId>dubbo-service-project</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <modules>
        <module>dubbo-service-api</module>
        <module>dubbo-service-consumer</module>
        <module>dubbo-service-provider-1</module>
        <module>dubbo-service-provider-2</module>
    </modules>
    <packaging>pom</packaging>

    <properties>
        <java.version>1.8</java.version>
        <spring-boot.version>2.1.4.RELEASE</spring-boot.version>
        <dubbo.version>2.7.1</dubbo.version>
        <zookeeper.version>3.4.13</zookeeper.version>
        <curator.version>4.1.0</curator.version>
    </properties>

    <dependencyManagement>

        <dependencies>
            <!-- Spring Boot -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!-- Aapche Dubbo  -->
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-dependencies-bom</artifactId>
                <version>${dubbo.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo</artifactId>
                <version>${dubbo.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>javax.servlet</groupId>
                        <artifactId>servlet-api</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>log4j</groupId>
                        <artifactId>log4j</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>
dubbo-service-api UserService.java
package com.ctgu.dubbo.service.api;

public interface UserService {
    public String sayHello(String name);
}
dubbo-service-provider-1 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">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.ctgu</groupId>
        <artifactId>dubbo-service-project</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.ctgu</groupId>
    <artifactId>dubbo-service-provider-1</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>dubbo-service-provider-1</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.ctgu</groupId>
            <artifactId>dubbo-service-api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>${dubbo.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
        </dependency>
        <dependency>
            <groupId>de.javakaffee</groupId>
            <artifactId>kryo-serializers</artifactId>
            <version>0.45</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>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>${zookeeper.version}</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
dubbo-service-provider-1 UserServiceImpl.java
package com.ctgu.dubbo.service.provider1.service;

import com.ctgu.dubbo.service.api.UserService;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.beans.factory.annotation.Value;

import java.util.Date;

@Service(version = "${user.service.version}")
public class UserServiceImpl implements UserService {
    @Value("${dubbo.application.name}")
    private String serviceName;

    private static Integer i = 0;

//    @HystrixCommand(commandProperties = {
//            @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "10"),
//            @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "2000")
//    })
    @Override
    public String sayHello(String name) {
        System.out.println(serviceName + ":" + (++i));
//        return String.format("[%s] : Hello, %s, %s", serviceName, name, new Date());
        throw new RuntimeException("Exception to show hystrix enabled.");
    }
}
dubbo-service-provider-1 application.yml
spring:
  application:
    name: dubbo-service-provider1

user:
  service:
    version: 0.0.1

embedded:
  zookeeper:
    port: 2181

dubbo:
  scan:
    base-packages: com.ctgu.dubbo.service.provider1.service
  application:
    id: ${spring.application.name}
    name: ${spring.application.name}
    qos-port: 2222
    qos-enable: true
  protocol:
    id: dubbo
    name: dubbo
    port: 12345
    status: server
    serialization: kryo
  registry:
    id: zookeeper
    address: zookeeper://master:${embedded.zookeeper.port}
  metadata-report:
    address: zookeeper://master:${embedded.zookeeper.port}


management:
  endpoint:
    dubbo:
      enabled: true
    dubbo-shutdown:
      enabled: true
    dubbo-configs:
      enabled: true
    dubbo-services:
      enabled: true
    dubbo-references:
      enabled: true
    dubbo-properties:
      enabled: true
  # Dubbo Health
  health:
    dubbo:
      status:
        ## StatusChecker Name defaults (default : "memory", "load" )
        defaults: memory
        ## StatusChecker Name extras (default : empty )
        extras: load,threadpool
dubbo-service-consumer 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">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.ctgu</groupId>
        <artifactId>dubbo-service-project</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.ctgu</groupId>
    <artifactId>dubbo-service-consumer</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>dubbo-service-consumer</name>
    <description>Demo project for Spring Boot</description>

    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.ctgu</groupId>
            <artifactId>dubbo-service-api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>${dubbo.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
        </dependency>
        <dependency>
            <groupId>de.javakaffee</groupId>
            <artifactId>kryo-serializers</artifactId>
            <version>0.45</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </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>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>${zookeeper.version}</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
dubbo-service-consumer UserController.java
package com.ctgu.dubbo.service.consumer.controller;


import com.ctgu.dubbo.service.api.UserService;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @Reference(version = "${user.service.version}")
    private UserService userService;

    @HystrixCommand(fallbackMethod = "hiError")
    @GetMapping("/hi")
    public String test() {
        for( int i=0; i<119; i++ ) {
            userService.sayHello("ct");
        }
        return userService.sayHello("ct");
    }

    public String hiError(){
        return "Hystrix fallback";
    }
}
dubbo-service-consumer application.yml
spring:
  application:
    name: dubbo-service-consumer

server:
  port: 8083

user:
  service:
    version: 0.0.1

embedded:
  zookeeper:
    port: 2181

dubbo:
  scan:
    base-packages: com.ctgu.dubbo.service.consumer.controller
  application:
    id: ${spring.application.name}
    name: ${spring.application.name}
  protocol:
    id: dubbo
    name: dubbo
    port: 12345
    serialization: kryo
  registry:
    id: zookeeper
    address: zookeeper://master:${embedded.zookeeper.port}
  metadata-report:
    address: zookeeper://master:${embedded.zookeeper.port}

相关文章

网友评论

      本文标题:深入学习java笔记-16.SpringBoot2.1之Dubb

      本文链接:https://www.haomeiwen.com/subject/vvdgoqtx.html