SpringCloud服务的注册与发现(Eureka)
2017-10-14 22:12
846 查看
- 服务治理的概念
服务治理是微服务架构中最为核心和基础的模块,主要用来实现各个微服务实列的自动化注册与发现。微服务实例可以是一个简单的SpringBoot程序
- 如何实现服务注册与服务发现
在程序中服务提供方需要显示的将服务注册到注册中心去。在注册登记中心登记在自己提供的服务,主机。端口号,版本号,通信协议等等。注册中心通过服务名进行管理,例如:
服务调用方通过服务名发起调用实现,调用方需要向服务注册中心咨询服务,并获取所有服务实例的清单,以实现对具体服务实例的访问,如果有多个服务可以选择的话,采取某种轮询策略(客户端负载平衡)取出一个位置进行调用。在调用服务的时候还会涉及缓存等。
- 服务治理框架的关键
服务治理框架的三大核心,服务调用方、服务提供方、服务注册中心。服务调用方及服务提供方都是围绕服务注册中心展开的
- 搭建服务注册中心
和搭建简单的SpringBoot项目差不多,不过需要在idea中勾选EurekaServer,加载SpringCloud的注册中心的依赖
pom.xml:
EurekaServerApplication启动类
加入了@EnableEurekaServer注解,启动
一个服务注册中心
application.properties配置类
server.port:本地测试的时候为了防止端口被占用改变端口号
eureka.client.register-with-eureka:代表不向注册中心注册自己,这个服务注册中心是单节点的服务中心,为了满足生产环境,需要使用构建高可用的服务注册中心
eureka.client.fetch-registry:代表不去检索服务,因为注册中心的主要作用是维护服务器实例
eureka.client.serviceUrl.defaultZon:注册中心的地址,服务器调用方和服务器提供方向里面请求、注册服务
完成以后,启动应用,访问http://localhost:1111/
因为此时没有服务注册中心注册服务,所以Instances currently registered with Eureka这一行内容为空
- 服务提供者
pom.xml
和服务注册表的pom.xml类似,只不过将spring-cloud-starter-eureka-service改成了spring-cloud-starter-eureka
启动类
@EnableDiscoveryClient注解表明自己是一个服务提供方
application.properties
spring.application.name:服务名
eureka.client.serviceUrl.defaultZone:向哪个注册中心注册服务
同时启动服务注册中心和服务提供方,访问http://localhost:1111/和http://localhost:1112/hello
前者:
多了一个服务
后者将返回helloworld….
- 服务调用方
pom.xml
pom.xml中多了spring-cloud-starter-ribbon
启动类
@EnableDiscoveryClient:通过该注解让该应用注册为Eureka客户端的应用,以获得服务发现的能力
@Bean:创建RestTemplate实例,通过它发起对服务的调用
@LoadBalanced:开启客户端负载平衡
服务调用方控制类:
这里访问的地址是服务名个,而不是一个具体的地址,通过Ribbon实现负载平衡,选择一个服务地址
application.properties
此时再次访问http://localhost:1111将会发现有两个当前服务被注册了,访问http://localhost:9000/ribbon-consumer:
完整代码地址:https://github.com/TiantianUpup/SpringCloudEureka
服务治理是微服务架构中最为核心和基础的模块,主要用来实现各个微服务实列的自动化注册与发现。微服务实例可以是一个简单的SpringBoot程序
- 如何实现服务注册与服务发现
在程序中服务提供方需要显示的将服务注册到注册中心去。在注册登记中心登记在自己提供的服务,主机。端口号,版本号,通信协议等等。注册中心通过服务名进行管理,例如:
服务调用方通过服务名发起调用实现,调用方需要向服务注册中心咨询服务,并获取所有服务实例的清单,以实现对具体服务实例的访问,如果有多个服务可以选择的话,采取某种轮询策略(客户端负载平衡)取出一个位置进行调用。在调用服务的时候还会涉及缓存等。
- 服务治理框架的关键
服务治理框架的三大核心,服务调用方、服务提供方、服务注册中心。服务调用方及服务提供方都是围绕服务注册中心展开的
- 搭建服务注册中心
和搭建简单的SpringBoot项目差不多,不过需要在idea中勾选EurekaServer,加载SpringCloud的注册中心的依赖
pom.xml:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.7.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncod 4000 ing> <java.version>1.8</java.version> <spring-cloud.version>Dalston.SR4</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</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>
EurekaServerApplication启动类
@EnableEurekaServer @SpringBootApplication public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } }
加入了@EnableEurekaServer注解,启动
一个服务注册中心
application.properties配置类
server.port = 1111 eureka.instance.hostname = localhost eureka.client.register-with-eureka = false eureka.client.fetch-registry = false eureka.client.serviceUrl.defaultZone = http://${eureka.instance.hostname}:${server.port}/eureka
server.port:本地测试的时候为了防止端口被占用改变端口号
eureka.client.register-with-eureka:代表不向注册中心注册自己,这个服务注册中心是单节点的服务中心,为了满足生产环境,需要使用构建高可用的服务注册中心
eureka.client.fetch-registry:代表不去检索服务,因为注册中心的主要作用是维护服务器实例
eureka.client.serviceUrl.defaultZon:注册中心的地址,服务器调用方和服务器提供方向里面请求、注册服务
完成以后,启动应用,访问http://localhost:1111/
因为此时没有服务注册中心注册服务,所以Instances currently registered with Eureka这一行内容为空
- 服务提供者
pom.xml
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.7.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>Dalston.SR4</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</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>
和服务注册表的pom.xml类似,只不过将spring-cloud-starter-eureka-service改成了spring-cloud-starter-eureka
启动类
@EnableDiscoveryClient @SpringBootApplication public class ServiceproviderApplication { public static void main(String[] args) { SpringApplication.run(ServiceproviderApplication.class, args); } } @EnableDiscoveryClient注解,激活DiscoveryClient实现 - 控制类 @EnableDiscoveryClient @Controller public class HelloController { @Value("${server.port}") private String port; @RequestMapping(value = "/hello", method = RequestMethod.GET) @ResponseBody public String sayHello() { return "hello world I'am from " + port; } }
@EnableDiscoveryClient注解表明自己是一个服务提供方
application.properties
server.port=1112 spring.application.name=hello-service eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/
spring.application.name:服务名
eureka.client.serviceUrl.defaultZone:向哪个注册中心注册服务
同时启动服务注册中心和服务提供方,访问http://localhost:1111/和http://localhost:1112/hello
前者:
多了一个服务
后者将返回helloworld….
- 服务调用方
pom.xml
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.7.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>Dalston.SR4</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</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>
pom.xml中多了spring-cloud-starter-ribbon
启动类
@EnableDiscoveryClient @SpringBootApplication public class ServiceconsumerApplication { @Bean @LoadBalanced RestTemplate restTemplate() { return new RestTemplate(); } public static void main(String[] args) { SpringApplication.run(ServiceconsumerApplication.class, args); } }
@EnableDiscoveryClient:通过该注解让该应用注册为Eureka客户端的应用,以获得服务发现的能力
@Bean:创建RestTemplate实例,通过它发起对服务的调用
@LoadBalanced:开启客户端负载平衡
服务调用方控制类:
@Controller public class ConsumerController { @Autowired private RestTemplate restTemplate; @RequestMapping(value = "/ribbon-consumer", method = RequestMethod.GET) @ResponseBody public String helloConsumer() { return restTemplate.getForEntity("http://HELLO-SERVICE/hello",String.class).getBody(); } }
这里访问的地址是服务名个,而不是一个具体的地址,通过Ribbon实现负载平衡,选择一个服务地址
application.properties
spring.application.name=ribbon-consumer server.port=9000 eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/
此时再次访问http://localhost:1111将会发现有两个当前服务被注册了,访问http://localhost:9000/ribbon-consumer:
完整代码地址:https://github.com/TiantianUpup/SpringCloudEureka
相关文章推荐
- SpringCloud Eureka 服务注册与服务发现
- SpringCloud | Docker 学习系列 | Kubernetes 学习 将SpringCloud Eureka 服务注册与发现部署到docker中并放入到Kubernetes中管理
- Spring Cloud构建微服务架构:服务注册与发现(Eureka、Consul)【Dalston版】
- springcloud(第三篇)springcloud eureka 服务注册与发现 *****
- 服务注册发现Eureka之一:Spring Cloud Eureka的服务注册与发现
- Spring Cloud 入门教程 - Eureka服务注册与发现
- SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka)
- SpringCloud之服务注册与发现Spring Cloud Eureka实例
- 服务注册和服务发现-Eureka的服务认证和集群--Spring Cloud Netflix
- 《Spring Cloud Netflix》--服务注册和服务发现-Eureka的深入了解
- SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka)
- Spring-cloud & Netflix 源码解析:Eureka 服务注册发现接口 ****
- SpringCloud——Eureka服务注册和发现
- (二)SpringBoot+SpringCloud —— 使用Eureka实现服务注册与发现
- Spring Cloud:服务注册与发现(Eureka)【Dalston版】
- Spring Cloud版——电影售票系统<—>Eureka微服务注册与发现
- SpringCloud——Eureka服务注册和发现
- Spring-cloud & Netflix 源码解析:Eureka 服务注册发现接口 ****
- Spring cloud Eureka服务注册及发现(二)创建注册服务
- springcloud微服务三:Eureka服务治理之注册服务提供者及服务的发现和消费