基于SpringBoot整合SpringCloud微服务框架--Eureka注册中心及Feign远程调用/Ribbon负载均衡

一、整合步骤

1、根项目springcloud_study

(1)目录结构

基于SpringBoot整合SpringCloud微服务框架--Eureka注册中心及Feign远程调用/Ribbon负载均衡

(2)步骤

 1 1、创建及配置Root项目springcloud_study
 2 (1)在pom.xml进行依赖添加
 3     <groupId>org.lkw</groupId>
 4     <artifactId>springcloud_study</artifactId>
 5     <packaging>pom</packaging>
 6     <version>1.0-SNAPSHOT</version>
 7     <modules>
 8         <module>springcloud_study_eurekaserver</module>
 9         <module>springcloud_study_helloservice</module>
10         <module>springcloud_study_feignconsumer</module>
11         <module>springcloud_study_ribbonconsumer</module>
12     </modules>
13 
14     <!-- 引入继承SpringBoot框架父依赖 -->
15     <parent>
16         <groupId>org.springframework.boot</groupId>
17         <artifactId>spring-boot-starter-parent</artifactId>
18         <version>2.1.17.RELEASE</version>
19         <relativePath/>
20     </parent>
21 
22 
23     <properties>
24         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
25         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
26         <java.version>1.8</java.version>
27         <spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
28     </properties>
29 
30     <!-- 引入SpringBoot的测试依赖 -->
31     <dependencies>
32         <dependency>
33             <groupId>org.springframework.boot</groupId>
34             <artifactId>spring-boot-starter-test</artifactId>
35             <scope>provided</scope>
36         </dependency>
37     </dependencies>
38 
39     <!-- 声明SpringCloud使用版本,但不自动导入依赖 -->
40     <dependencyManagement>
41         <dependencies>
42             <dependency>
43                 <groupId>org.springframework.cloud</groupId>
44                 <artifactId>spring-cloud-dependencies</artifactId>
45                 <version>${spring-cloud.version}</version>
46                 <type>pom</type>
47                 <scope>import</scope>
48             </dependency>
49         </dependencies>
50     </dependencyManagement>
51 
52     <build>
53         <plugins>
54             <plugin>
55                 <groupId>org.springframework.boot</groupId>
56                 <artifactId>spring-boot-maven-plugin</artifactId>
57             </plugin>
58         </plugins>
59     </build>

2、子模块springcloud_study_eurekaserver

(1)目录结构

基于SpringBoot整合SpringCloud微服务框架--Eureka注册中心及Feign远程调用/Ribbon负载均衡

(2)步骤

 1 2、添加子模块Eureka server(注册中心)
 2 (1)在pom.xml进行依赖添加
 3     <parent>
 4         <artifactId>springcloud_study</artifactId>
 5         <groupId>org.lkw</groupId>
 6         <version>1.0-SNAPSHOT</version>
 7     </parent>
 8     <modelVersion>4.0.0</modelVersion>
 9 
10     <artifactId>springcloud_study_eurekaserver</artifactId>
11 
12     <!--eureka注册中心服务模块引入eureka依赖-->
13     <dependencies>
14         <dependency>
15             <groupId>org.springframework.cloud</groupId>
16             <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
17         </dependency>
18     </dependencies>
19 (2)在application.properties进行服务配置
20 # 服务注册中心端口号
21 server.port=8761
22 # 服务注册中心主机名
23 eureka.instance.hostname=127.0.0.1
24 # 不向注册中心注册自己
25 eureka.client.register-with-eureka=false
26 # 不需要检索服务
27 eureka.client.fetch-registry=false
28 # 注册中心地址,会自动填充主机名和端口名
29 eureka.client.service-url.defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
30 (3)创建Eureka项目的启动类
31 /**
32  * @author lkw
33  * eureka server启动类
34  */
35 @EnableEurekaServer
36 @SpringBootApplication
37 public class EurekaServerApplication {
38 
39     public static void main(String[] args){
40         SpringApplication.run(EurekaServerApplication.class,args);
41     }
42 }
43 (4)启动项目,在浏览器输入ip:端口进行eureka注册中心访问

3、子模块springcloud_study_helloservice

(1)目录结构

基于SpringBoot整合SpringCloud微服务框架--Eureka注册中心及Feign远程调用/Ribbon负载均衡

(2)步骤

 1 3、添加子模块Hello Service(创建服务方:服务提供者)
 2 (1)在pom.xml进行依赖添加
 3     <parent>
 4         <artifactId>springcloud_study</artifactId>
 5         <groupId>org.lkw</groupId>
 6         <version>1.0-SNAPSHOT</version>
 7     </parent>
 8     <modelVersion>4.0.0</modelVersion>
 9 
10     <artifactId>springcloud_study_helloservice</artifactId>
11 
12     <dependencies>
13         <dependency>
14             <groupId>org.springframework.cloud</groupId>
15             <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
16         </dependency>
17         <dependency>
18             <groupId>org.springframework.boot</groupId>
19             <artifactId>spring-boot-starter-web</artifactId>
20         </dependency>
21     </dependencies>
22 (2)在application.yml进行服务配置
23 # 服务提供者配置
24 server:
25   #当前服务端口号
26   port: 8763
27 spring:
28   application:
29     #当前应用的名称
30     name: service-hello
31 eureka:
32   client:
33     serviceUrl:
34       #注册中心的地址
35       defaultZone: http://localhost:8761/eureka/
36 (3)添加Hello服务方的启动类
37 /**
38  * @author lkw
39  * Hello服务启动类
40  */
41 @SpringBootApplication
42 @EnableEurekaClient
43 public class HelloServiceApplication {
44 
45     public static void main(String[] args){
46         SpringApplication.run(HelloServiceApplication.class,args);
47     }
48 }
49 (4)添加控制器进行测试
50 /**
51  * @author lkw
52  * Hello服务控制器
53  *
54  */
55 @RestController
56 public class HelloController {
57 
58     @Value("${server.port}")
59     private String port;
60 
61     @RequestMapping(value="hello",method = RequestMethod.GET)
62     public String index(){
63         return "eurekaClient: Hello World "+this.port;
64     }
65 }
66 (5)更改端口,进行多实例启动,在eureka注册中心查看是否注册了此多用例服务
67 多实例启动方法:先在yml配置文件里更改不同的端口,然后在Edit configurations里勾选Allow parallel run(允许平行运行),最后启动项目即可

4、子模块springcloud_study_feignconsumer

(1)目录结构

基于SpringBoot整合SpringCloud微服务框架--Eureka注册中心及Feign远程调用/Ribbon负载均衡

(2)步骤

 1 4、添加子模块Feign consumer(基于Feign微服务框架实现消费者)
 2 (1)在pom.xml引入相关依赖
 3     <parent>
 4         <artifactId>springcloud_study</artifactId>
 5         <groupId>org.lkw</groupId>
 6         <version>1.0-SNAPSHOT</version>
 7     </parent>
 8     <modelVersion>4.0.0</modelVersion>
 9 
10     <artifactId>springcloud_study_feignconsumer</artifactId>
11 
12     <dependencies>
13         <dependency>
14             <groupId>org.springframework.cloud</groupId>
15             <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
16         </dependency>
17         <dependency>
18             <groupId>org.springframework.boot</groupId>
19             <artifactId>spring-boot-starter-web</artifactId>
20         </dependency>
21         <!-- 引入feign远程调用框架依赖 -->
22         <dependency>
23             <groupId>org.springframework.cloud</groupId>
24             <artifactId>spring-cloud-starter-openfeign</artifactId>
25         </dependency>
26     </dependencies>
27 (2)在application.yml进行服务配置
28 # 服务调用者即消费者配置
29 server:
30   port: 8765
31 spring:
32   application:
33     # 该服务的名字
34     name: server-feign
35 eureka:
36   client:
37     serviceUrl:
38       # eureka服务的地址
39       defaultZone: http://localhost:8761/eureka/
40 (3)创建feign项目启动类
41 /*
42  *@author lkw
43  * 服务消费者启动类
44  */
45 @SpringBootApplication
46 @EnableEurekaClient
47 @EnableFeignClients
48 @EnableDiscoveryClient
49 public class FeignApplication {
50 
51     public static void main(String[] args){
52         SpringApplication.run(FeignApplication.class,args);
53     }
54 }
55 (4)创建控制器
56 /**
57  * @author lkw
58  * Hello服务调用控制器
59  */
60 @RestController
61 public class HelloController {
62 
63     @Autowired
64     private HelloFeign helloFeign;
65 
66     @GetMapping(value="/hello")
67     public String getHello(){
68         return helloFeign.hello();
69     }
70 
71 
72 }
73 (5)创建feign服务进行远程方法调用
74 /**
75  * @author lkw
76  * 使用Feign对Hello服务进行远程调用(Feign自身封装了ribbon,所以已具备负载均衡功能)
77  *
78  */
79 @FeignClient(value="service-hello")   //远程服务名
80 public interface HelloFeign {
81 
82     @RequestMapping(value = "/hello")    //远程服务方法
83     String hello();
84 }
85 (6)启动项目,在浏览器访问ip:端口/hello,多刷新几次,注意观察远程服务的端口变化即负载均衡是否生效

5、子模块springcloud_study_ribbonconsumer

(1)目录结构

基于SpringBoot整合SpringCloud微服务框架--Eureka注册中心及Feign远程调用/Ribbon负载均衡

(2)步骤

 1 5、添加子模块Ribbon consumer(基于Ribbon微服务框架实现消费者)
 2 (1)在pom.xml引入相关依赖
 3     <parent>
 4         <artifactId>springcloud_study</artifactId>
 5         <groupId>org.lkw</groupId>
 6         <version>1.0-SNAPSHOT</version>
 7     </parent>
 8     <modelVersion>4.0.0</modelVersion>
 9 
10     <artifactId>springcloud_study_ribbonconsumer</artifactId>
11 
12     <dependencies>
13         <dependency>
14             <groupId>org.springframework.cloud</groupId>
15             <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
16         </dependency>
17         <dependency>
18             <groupId>org.springframework.boot</groupId>
19             <artifactId>spring-boot-starter-web</artifactId>
20         </dependency>
21         <!-- 引入Ribbon负载均衡框架依赖 -->
22         <dependency>
23             <groupId>org.springframework.cloud</groupId>
24             <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
25         </dependency>
26     </dependencies>
27 (2)在appplication.yml进行服务配置
28 # 服务调用者即消费者配置
29 server:
30   port: 8764
31 spring:
32   application:
33     # 该服务的名字
34     name: server-ribbon
35 eureka:
36   client:
37     serviceUrl:
38       # eureka服务的地址
39       defaultZone: http://localhost:8761/eureka/
40 (3)创建Ribbon项目启动类
41 /**
42  * @author lkw
43  * 启动类:使用Ribbon实现消费者客户端对远程服务调用以及负载均衡
44  */
45 @SpringBootApplication
46 @EnableEurekaClient
47 @EnableDiscoveryClient
48 public class RibbonApplication {
49 
50     public static void main(String[] args){
51         SpringApplication.run(RibbonApplication.class,args);
52     }
53 
54     @Bean
55     @LoadBalanced    //使RestTemplate具有负载均衡
56     public RestTemplate restTemplate(){
57         return new RestTemplate();
58     }
59 }
60 (4)创建控制器,进行远程服务调用
61 /**
62  * @author lkw
63  * Hello服务调用控制器
64  */
65 @RestController
66 public class HelloController {
67 
68     @Autowired
69     private RestTemplate restTemplate;
70 
71     @GetMapping(value="/ribbonHello")
72     public String getRibbonHello(){
73 
74         String urlHelloService="http://service-hello/hello";   //远程服务及方法urk
75         String result=restTemplate.getForObject(urlHelloService,String.class);
76 
77         System.out.println("使用ribbbon访问结果:"+result);
78         return "使用ribbbon访问结果:"+result;
79     }
80 
81 }
82 (5)启动项目,在浏览器访问ip:端口/ribbonHello,注意观察远程服务的端口变化即负载均衡是否生效

二、FAQ(问题集锦)

三、成果

1、访问Eureka注册中心,初始时,服务列表为空

基于SpringBoot整合SpringCloud微服务框架--Eureka注册中心及Feign远程调用/Ribbon负载均衡

 

 

 2、启动服务提供者HelloService,在注册中心的服务列表可以看到它的注册信息

 

基于SpringBoot整合SpringCloud微服务框架--Eureka注册中心及Feign远程调用/Ribbon负载均衡

 

 

 3、启动消费者Feign,可以在注册中心的服务列表看到它的注册信息

基于SpringBoot整合SpringCloud微服务框架--Eureka注册中心及Feign远程调用/Ribbon负载均衡

 

 

 4、使用Feign消费者方式,进行远程方法调用以及负载均衡

基于SpringBoot整合SpringCloud微服务框架--Eureka注册中心及Feign远程调用/Ribbon负载均衡

基于SpringBoot整合SpringCloud微服务框架--Eureka注册中心及Feign远程调用/Ribbon负载均衡

 

 5、使用Ribbon消费者方式,进行远程方法调用以及负载均衡

 基于SpringBoot整合SpringCloud微服务框架--Eureka注册中心及Feign远程调用/Ribbon负载均衡

 

 基于SpringBoot整合SpringCloud微服务框架--Eureka注册中心及Feign远程调用/Ribbon负载均衡

 

上一篇:Extjs学习笔记--(五,事件)


下一篇:eureka服务如何下线及启动