SpringCloud微服务注册和消费模式总结

 1.【微服务注册过程】:

(1)maven依赖:

<?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>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.4.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.caox</groupId><artifactId>eureka-server</artifactId><version>0.0.1-SNAPSHOT</version><name>eureka-server</name><description>Demo project for Spring Boot</description><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><spring-cloud.version>Greenwich.SR1</spring-cloud.version><apollo-client.version>1.1.0</apollo-client.version></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- apollo配置 --><dependency><groupId>com.ctrip.framework.apollo</groupId><artifactId>apollo-client</artifactId><version>${apollo-client.version}</version></dependency><dependency><groupId>com.ctrip.framework.apollo</groupId><artifactId>apollo-core</artifactId><version>${apollo-client.version}</version></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build><repositories><repository><id>aliyun-maven</id><url>http://maven.aliyun.com/nexus/content/groups/public/</url></repository><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository></repositories></project>

(2)主配置文件application.yml:

server:port: 8761eureka:instance:hostname: localhostclient:registerWithEureka: falsefetchRegistry: falseserviceUrl:defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

(3)主程序切入口:

package com.caox;import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@SpringBootApplication
@EnableEurekaServer
@EnableApolloConfig
public class EurekaServerApplication {public static void main(String[] args) {SpringApplication.run(EurekaServerApplication.class, args);}}

 2.【Eureka Client 服务提供者】:

(1)maven依赖:

<?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>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.4.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.caox</groupId><artifactId>provider-server</artifactId><version>0.0.1-SNAPSHOT</version><name>provider-server</name><description>Demo project for Spring Boot</description><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><spring-cloud.version>Greenwich.SR1</spring-cloud.version><apollo-client.version>1.1.0</apollo-client.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--apollo配置--><dependency><groupId>com.ctrip.framework.apollo</groupId><artifactId>apollo-client</artifactId><version>${apollo-client.version}</version></dependency><dependency><groupId>com.ctrip.framework.apollo</groupId><artifactId>apollo-core</artifactId><version>${apollo-client.version}</version></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

(2)主配置文件:

eureka:client:serviceUrl:defaultZone: http://localhost:8761/eureka/
server:port: 8762
spring:application:name: provider-test

(3) 主程序切入口:

package com.caox;import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication
@EnableApolloConfig
@EnableDiscoveryClient
public class ProviderServerApplication {public static void main(String[] args) {SpringApplication.run(ProviderServerApplication.class, args);}}

(4)服务Controller层提供方法:

package com.caox.controller;import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;/*** @author : nazi* @version : 1.0* @date : 2019/4/22 17:02*/
@Controller
public class ProviderController {@Value("${server.port}")private String port;@RequestMapping(value = "hi")@ResponseBodypublic String hello(){return "hello world! I am from " + port;}
}

3. 【使用LoadBalancerClient服务消费模式】:负载均衡

(1)maven依赖:

<?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.voyer</groupId><artifactId>voyer-consumer-test</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>voyer-consumer-test</name><description>Demo project for Spring Boot</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.0.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><spring-cloud.version>Finchley.M9</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build><repositories><repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><snapshots><enabled>true</enabled></snapshots></repository><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository></repositories></project>

(2)默认启动程序:  注入RestTemplate

package com.caox;import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.client.RestTemplate;@CrossOrigin  //允许跨越访问
@SpringBootApplication
@EnableApolloConfig
@EnableDubboConfiguration
@EnableEurekaClient
public class SpringBootWebDemoApplication {public static void main(String[] args) {SpringApplication.run(SpringBootWebDemoApplication.class, args);}@Beanpublic RestTemplate restTemplate() {return new RestTemplate();}}

(3) 服务Controller层提供方法:

@RestController
public class ConsumerController {@AutowiredLoadBalancerClient loadBalancerClient;@AutowiredRestTemplate restTemplate;@RequestMapping("/hi")public String hello(){ServiceInstance serviceInstance = loadBalancerClient.choose("provider-test");String url = "http://" + serviceInstance.getHost() + ":" + serviceInstance.getPort() + "/hi";System.out.println(url);return restTemplate.getForObject(url, String.class);}
}

其中 provider-test是指 Eureka  Client 服务提供者 服务实例名,配置是 spring.application.name

4. 【使用Ribbon服务消费模式】:负载均衡

(1)maven依赖:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>

(2)默认启动程序: 

package com.caox;import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;@SpringBootApplication
@EnableApolloConfig
//@EnableEurekaClient
@EnableDiscoveryClient
// 如果选用的注册中心是eureka,那么就推荐@EnableEurekaClient,如果是其他的注册中心,那么推荐使用@EnableDiscoveryClient。
public class ConsumerRibbonApplication {public static void main(String[] args) {SpringApplication.run(ConsumerRibbonApplication.class, args);}@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}
}

(3) 服务Controller层提供方法:

package com.caox.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;/*** @author : nazi* @version : 1.0* @date : 2019/4/22 14:01*/
@RestController
public class ConsumerController {@AutowiredRestTemplate restTemplate;@RequestMapping("/hi")public String hello(){return restTemplate.getForObject("http://spring-boot-web/hi", String.class);}
}

5. 【使用Feign服务消费模式】:负载均衡

(1)maven依赖:

 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-feign</artifactId></dependency>

(2)默认启动程序: 

package com.caox;import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;@SpringBootApplication
@EnableApolloConfig
@EnableDiscoveryClient
@EnableFeignClients
public class ConsumerFeignApplication {public static void main(String[] args) {SpringApplication.run(ConsumerFeignApplication.class, args);}}

(3)接口服务层:

package com.caox.service;import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;/*** @author : nazi* @version : 1.0* @date : 2019/4/22 16:34*/
@FeignClient(value = "spring-boot-web")
public interface ConsumerService {@RequestMapping(value = "/hi",method = RequestMethod.GET)String hiFromProvider();
}

(4)服务Controller层提供方法:

package com.caox.controller;import com.caox.service.ConsumerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;/*** @author : nazi* @version : 1.0* @date : 2019/4/22 16:33*/
@RestController
public class ConsumerController {@AutowiredConsumerService consumerService;@RequestMapping(value = "/hi",method = RequestMethod.GET)public String hi(){return consumerService.hiFromProvider();}
}

 参考文献:服务的注册与发现(Eureka)、服务消费(LoadBalancerClient、Ribbon、Feign)​​​​​​​

其中 EnableDiscoveryClient与EnableEurekaClient的区别:Spring Cloud源码分析之Eureka篇第三章:EnableDiscoveryClient与EnableEurekaClient的区别(Edgware版本)​​​​​​​

SpringCloud微服务注册和消费模式总结相关推荐

  1. SpringCloud微服务注册调用入门教程

    关于SpringCloud的相关知识在此不做讨论 , 直接一步步完成一套简单完整的SpringCloud微服务注册与调用的Demo . 1 . 创建一个maven主工程 , 填写工程信息 , Fini ...

  2. SpringCloud 微服务注册中心 Eureka - Server

    前言 上一篇文章介绍了 Eureka Client 端的相关源码.这篇文章我们学习 Eureka Server 是如何存储 Client 注册过来的实例信息,以及 Server 端如何与 Client ...

  3. SpringCloud微服务注册中心如何承载大型系统的千万级访问?源码及原理分析

    2019独角兽企业重金招聘Python工程师标准>>> 问题起源     Spring Cloud架构体系中,Eureka是一个至关重要的组件,它扮演着微服务注册中心的角色,所有的服 ...

  4. SpringCloud微服务注册调用入门-断路器

    1 . 断路器概念 上篇文中我们完成了一个最简单的一个微服务注册与调用的项目 , 但这是远远不够的 . 在实际的微服务架构中 , 通常是根据业务来拆分成一个个的服务 , 服务与服务之间可以相互调用(R ...

  5. SpringCloud微服务注册调用入门-路由网关

    1 . 路由网关的介绍 路由网关(Zuul)的主要功能是路由转发和过滤器 . 路由功能是微服务的一部分 , 比如/service/user转发到到用户服务 , /service/shop转发到到商店服 ...

  6. 基于SpringCloud微服务的Hdfs分布式大数据实现的企业网盘系统

    目录 1 绪 论 5 1.1 研究的背景及意义 5 1.1.1 选题的背景 5 1.1.2 国内外研究现状 6 1.1.3 研究的意义 7 1.2 系统目标 7 2 需求分析 8 2.1 功能需求 8 ...

  7. 【过程记录】springcloud配置使用Eureka作服务发现组件并进行微服务注册

    Eureka介绍 工具准备 步骤 编写eureka server 编写微服务应用: 查询指定微服务在Eureka上的实例列表 Eureka的自我保护模式 Eureka介绍 Eureka是Netflix ...

  8. SpringCloud微服务:Eureka组件之服务注册与发现

    一.Eureka基本架构 1.Eureka角色结构图 角色职责如下: 1).Register:服务注册中心,它是一个Eureka Server ,提供服务注册和发现功能. 2).Provider:服务 ...

  9. springcloud微服务系列之服务注册与发现组件Eureka

    一.Eurake的简介 二.使用Eureka进行服务的注册消费 1.创建一个服务注册中心 2.创建服务的提供者 3.创建服务的消费者 总结 一.Eurake的简介 今天我们来介绍下springclou ...

最新文章

  1. 什么是信息服务外包?
  2. JAVA-如何打包成jar包
  3. qt 中的 quit() close()与 exit()
  4. linux命令:until循环
  5. spring书籍调研
  6. map集合的常用方法和遍历
  7. 好的原程序做出好的软件
  8. 遍历一个文件下的所有目录和文件
  9. 当Eclipse出现“initializing java tooling has encountered a problem”的解决方法
  10. IDEA eclipse快捷键大全
  11. XSS扫描器编写思路
  12. v-for中的key
  13. Kolmogorov复杂性 简介
  14. Java-你知道String为什么不可变吗?
  15. UG NX二次开发(C#)-建模-判断一张面是孔面还是凸台面
  16. 计算机主机进水无法启动,电脑主机进水会有什么影响!
  17. 机器学习(1)泛化误差上界的实现及分析
  18. 【转】PCM Audio,PCM格式音频文件 详解
  19. ubuntu18.04根目录已满造成开机失败报错Fail to start....
  20. 文件里的三个重要时间:access time(访问时间), modify time(修改时间), change time(状态改动时间)

热门文章

  1. Android 使用FFmpeg 裁剪出正方形视频
  2. 玩转西塘:感受水墨江南的迷醉风情
  3. c语言空格影响编译吗,C语言的空格问题
  4. Spring+SpringMVC+Jsp实现校园二手交易系统
  5. html中auto是设置什么的,css中margin:auto什么意思?margin:auto属性的用法详解
  6. Navicat15安装使用
  7. 管理3.0 学习词汇笔记 一 树
  8. Java多线程读取文件
  9. memset, fill 对bool,int 赋值的效率
  10. 电影中装逼的滚动屏幕