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}
网友评论