本文接著上一篇寫的《Java微服務(一):dubbo-admin控制臺的使用》,上篇文章介紹了docker,zookeeper環境的安裝,并參考dubbo官網演示了dubbo-admin控制臺的使用。上篇文章已經搭建好zookeeper服務注冊中心,本片文章主要搭建服務消費者和服務提供者。按照微服務的原則,本文將demo分為3部分:服務接口、服務消費者、服務消費者。   服務接口:定義了系統所需要的全部接口。   服務提供者:主要是對接口的實現。   服務消費者:對接口的使用 1.Dubbo介紹       節點角色說明 Provider 暴露服務的服務提供方 Consumer 調用遠程服務的服務消費方 Registry 服務注冊與發現的注冊中心 Monitor 統計服務的調用次數和調用時間的監控中心 Container 服務運行容器     Dubbo 架構具有以下幾個特點,分別是連通性、健壯性、伸縮性、以及向未來架構的升級性。 調用關系說明 服務容器負責啟動,加載,運行服務提供者。 服務提供者在啟動時,向注冊中心注冊自己提供的服務。 服務消費者在啟動時,向注冊中心訂閱自己所需的服務。 注冊中心返回服務提供者地址列表給消費者,如果有變更,注冊中心將基于長連接推送變更數據給消費者。 服務消費者,從提供者地址列表中,基于軟負載均衡算法,選一臺提供者進行調用,如果調用失敗,再選另一臺調用。 服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鐘發送一次統計數據到監控中心。 Dubbo 架構具有以下幾個特點,分別是連通性、健壯性、伸縮性、以及向未來架構的升級性。 更詳細的介紹,請參考官網:http://dubbo.apache.org/en-us/ 2.服務接口   通過idea創建一個jar工程,創建工程的過程可以參考《Spring boot 入門(一):快速搭建Spring boot項目》,此工程的目的只是簡單的定義接口,所以這里直接創建jar包,不是maven工程。創建好了后,新建一個接口。以下是我創建的接口:     其中UserService代碼如下: 1 package com.edu.hello.dubbo.service.user.api; 2 3 public interface UserService { 4 String sayHi(); 5 }   創建完接口后,需要把接口install到本地倉庫,供服務消費者和服務提供者使用   在Terminal直接指向mvn clean install或者直接在lifecycle目錄下點擊install進行安裝,出現如下頁面,表示安裝成功     3.服務提供者   服務提供者主要是對接口的實現,用相同的方法創建一個maven工程,創建好后的maven工程目錄如下:   其中UserServicelmpl是多接口的實現,代碼如下: 1 package com.edu.hello.dubbo.service.user.provider.api.impl; 2 3 import com.alibaba.dubbo.config.annotation.Service; 4 import com.edu.hello.dubbo.service.user.api.UserService; 5 import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; 6 import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty; 7 import org.springframework.beans.factory.annotation.Value; 8 9 /** 10 * @ClassName UserServiceImpl 11 * @Deccription TODO 12 * @Author DZ 13 * @Date 2019/8/31 11:20 14 **/ 15 @Service(version = "${user.service.version}") 16 public class UserServiceImpl implements UserService { 17 18 @Value("${dubbo.protocol.port}") 19 private String port; 20 21 /*@HystrixCommand(commandProperties = { 22 @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "10"), 23 @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "2000") 24 })*/ 25 @Override 26 public String sayHi() { 27 return "Say Hello, i am from " + port; 28 } 29 } 其中@HystrixCommand注解在后面熔斷器中會講到,這里先注釋。 yml配置如下: 1 spring: 2 application: 3 name: hello-dubbo-service-user-provider 4 5 user: 6 service: 7 version: 1.0.0 8 9 dubbo: 10 scan: 11 basePackages: com.edu.hello.dubbo.service.user.provider.api 12 application: 13 id: hello-dubbo-service-user-provider 14 name: hello-dubbo-service-user-provider 15 qos-port: 22222 16 qos-enable: true 17 protocol: 18 id: dubbo 19 name: dubbo 20 port: 12346 21 status: server 22 serialization: kryo #高速序列化 23 # optimizer: 24 25 registry: 26 id: zookeeper 27 address: zookeeper://192.168.1.12:2181?back=192.168.1.12:2182,192.168.1.12:2183 28 provider: 29 loadbalance: roundrobin #負載均衡 30 31 32 33 management: 34 endpoint: 35 dubbo: 36 enable: true 37 dubbo-shutdown: 38 enabled: true 39 dubbo-configs: 40 enabled: true 41 dubbo-services: 42 enabled: true 43 dubbo-references: 44 enabled: true 45 dubbo-peoperties: 46 enabled: true 47 health: 48 dubbo: 49 status: 50 defaults: memory 51 extras: load,threadpool View Code pom文件如下: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 //maven.apache.org/xsd/maven-4.0.0.xsd"> 4 <modelVersion>4.0.0</modelVersion> 5 <parent> 6 <groupId>org.springframework.boot</groupId> 7 <artifactId>spring-boot-starter-parent</artifactId> 8 <version>2.1.7.RELEASE</version> 9 <relativePath/> <!-- lookup parent from repository --> 10 </parent> 11 <groupId>com.edu</groupId> 12 <artifactId>hello-dubbo-service-user-provider</artifactId> 13 <version>1.0.0-SNAPSHOT</version> 14 <name>hello-dubbo-service-user-provider</name> 15 <description>Demo project for Spring Boot</description> 16 17 <properties> 18 <java.version>1.8</java.version> 19 </properties> 20 21 <dependencies> 22 <dependency> 23 <groupId>org.springframework.boot</groupId> 24 <artifactId>spring-boot-starter</artifactId> 25 </dependency> 26 <dependency> 27 <groupId>org.springframework.boot</groupId> 28 <artifactId>spring-boot-starter-actuator</artifactId> 29 </dependency> 30 <dependency> 31 <groupId>org.springframework.boot</groupId> 32 <artifactId>spring-boot-starter-test</artifactId> 33 <scope>test</scope> 34 </dependency> 35 <dependency> 36 <groupId>com.alibaba.boot</groupId> 37 <artifactId>dubbo-spring-boot-starter</artifactId> 38 <version>0.2.0</version> 39 </dependency> 40 <dependency> 41 <groupId>com.edu</groupId> 42 <artifactId>hello-dubbo-service-user-api</artifactId> 43 <version>${project.version}</version> 44 </dependency> 45 <dependency> 46 <groupId>de.javakaffee</groupId> 47 <artifactId>kryo-serializers</artifactId> 48 <version>0.42</version> 49 </dependency> 50 <!-- //mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-hystrix --> 51 <!-- //mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-hystrix --> 52 <dependency> 53 <groupId>org.springframework.cloud</groupId> 54 <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> 55 <version>2.0.1.RELEASE</version> 56 </dependency> 57 <!-- //mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-hystrix-dashboard --> 58 <dependency> 59 <groupId>org.springframework.cloud</groupId> 60 <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId> 61 <version>2.0.1.RELEASE</version> 62 </dependency> 63 64 65 66 </dependencies> 67 68 <build> 69 <plugins> 70 <plugin> 71 <groupId>org.springframework.boot</groupId> 72 <artifactId>spring-boot-maven-plugin</artifactId> 73 </plugin> 74 </plugins> 75 </build> 76 77 </project> View Code 本文pom文件和yml文件主要是根據dubbo官網中服務提供者的pom文件中的依賴而來,具體參考://github.com/apache/dubbo-spring-boot-project/tree/master/dubbo-spring-boot-samples/dubbo-registry-zookeeper-samples。     注意basePackages注解 4.服務提供者 按照相同的方式創建服務提供者,配置文件和服務提供者也類似,直接貼代碼了     1 package com.edu.hello.dubbo.service.user.consumer.controller; 2 3 4 import com.alibaba.dubbo.config.annotation.Reference; 5 import com.edu.hello.dubbo.service.user.api.UserService; 6 import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; 7 import org.springframework.web.bind.annotation.RequestMapping; 8 import org.springframework.web.bind.annotation.RequestMethod; 9 import org.springframework.web.bind.annotation.RestController; 10 11 /** 12 * @ClassName UserController 13 * @Deccription TODO 14 * @Author DZ 15 * @Date 2019/8/31 18:37 16 **/ 17 @RestController 18 public class UserController { 19 20 @Reference(version = "${user.service.version}") 21 private UserService userService; 22 23 @HystrixCommand(fallbackMethod = "sayHiError") 24 @RequestMapping(value = "hi", method = RequestMethod.GET) 25 public String sayHi() { 26 return userService.sayHi(); 27 } 28 29 public String sayHiError() { 30 return "Hystrix fallback"; 31 } 32 }     yml配置文件和pom配置文件和提供者基本類似; 1 spring: 2 application: 3 name: hello-dubbo-service-user-consumer 4 5 user: 6 service: 7 version: 1.0.0 8 9 dubbo: 10 scan: 11 basePackages: com.edu.hello.dubbo.service.user.consumer.controller 12 application: 13 id: hello-dubbo-service-user-consumer 14 name: hello-dubbo-service-user-consumer 15 qos-port: 22223 16 qos-enable: true 17 protocol: 18 id: dubbo 19 name: dubbo 20 port: 12345 21 #status: server 22 serialization: kryo 23 registry: 24 id: zookeeper 25 address: zookeeper://192.168.1.12:2181?back=192.168.1.12:2182,192.168.1.12:2183 26 27 28 management: 29 endpoint: 30 dubbo: 31 enable: true 32 dubbo-shutdown: 33 enabled: true 34 dubbo-configs: 35 enabled: true 36 dubbo-services: 37 enabled: true 38 dubbo-references: 39 enabled: true 40 dubbo-peoperties: 41 enabled: true 42 health: 43 dubbo: 44 status: 45 defaults: memory 46 extras: load,threadpool 47 server: 48 port: 9090 View Code 1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 //maven.apache.org/xsd/maven-4.0.0.xsd"> 4 <modelVersion>4.0.0</modelVersion> 5 <parent> 6 <groupId>org.springframework.boot</groupId> 7 <artifactId>spring-boot-starter-parent</artifactId> 8 <version>2.1.7.RELEASE</version> 9 <relativePath/> <!-- lookup parent from repository --> 10 </parent> 11 <groupId>com.edu</groupId> 12 <artifactId>hello-dubbo-service-user-consumer</artifactId> 13 <version>1.0.0-SNAPSHOT</version> 14 <name>hello-dubbo-service-user-consumer</name> 15 <description>Demo project for Spring Boot</description> 16 17 <properties> 18 <java.version>1.8</java.version> 19 </properties> 20 21 <dependencies> 22 <dependency> 23 <groupId>org.springframework.boot</groupId> 24 <artifactId>spring-boot-starter-web</artifactId> 25 </dependency> 26 <dependency> 27 <groupId>org.springframework.boot</groupId> 28 <artifactId>spring-boot-starter-actuator</artifactId> 29 </dependency> 30 <dependency> 31 <groupId>org.springframework.boot</groupId> 32 <artifactId>spring-boot-starter-test</artifactId> 33 <scope>test</scope> 34 </dependency> 35 <dependency> 36 <groupId>com.alibaba.boot</groupId> 37 <artifactId>dubbo-spring-boot-starter</artifactId> 38 <version>0.2.0</version> 39 </dependency> 40 <dependency> 41 <groupId>com.edu</groupId> 42 <artifactId>hello-dubbo-service-user-api</artifactId> 43 <version>${project.version}</version> 44 </dependency> 45 <dependency> 46 <groupId>de.javakaffee</groupId> 47 <artifactId>kryo-serializers</artifactId> 48 <version>0.42</version> 49 </dependency> 50 <!-- //mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-hystrix --> 51 <!-- //mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-hystrix --> 52 <dependency> 53 <groupId>org.springframework.cloud</groupId> 54 <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> 55 <version>2.0.1.RELEASE</version> 56 </dependency> 57 <!-- //mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-hystrix-dashboard --> 58 <dependency> 59 <groupId>org.springframework.cloud</groupId> 60 <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId> 61 <version>2.0.1.RELEASE</version> 62 </dependency> 63 </dependencies> 64 65 <build> 66 <plugins> 67 <plugin> 68 <groupId>org.springframework.boot</groupId> 69 <artifactId>spring-boot-maven-plugin</artifactId> 70 <configuration> 71 <mainClass>com.edu.hello.dubbo.service.user.consumer.HelloDubboServiceUserConsumerApplication</mainClass> 72 </configuration> 73 </plugin> 74 </plugins> 75 </build> 76 77 </project> View Code 這里面關于服務熔斷和負載均衡的的代碼可以暫時不關注,后面會專門對熔斷進行討論。   5.結果 分別啟動服務消費者和服務提供者,啟動成功后,如下:    訪問http://localhost:9090/hi   同時我們可以啟動dubbo-admin控制臺查看服務,注意端口的沖突:  
轉載自://www.cnblogs.com/dz-boss/p/11485020.html
国产无遮挡无码视频在线观看