一、目标
一个高可用的注册中心+ 一个高可用的服务提供者+一个使用负载均衡访问的客户端服务
二、步骤
以下在<spring-cloud.version>Finchley.M8</spring-cloud.version> 版本下建立
1.建立一个高可用的注册中心
POM主要依赖spring-cloud-starter-netflix-eureka-server:
<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-server</artifactId>
</dependency>
使得项目工程具备EurekaServer注册中心功能,只需引用:
@EnableEurekaServer
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer
@SpringBootApplication
public class SpringcloudApplication {
public static void main(String[] args) {
SpringApplication.run(SpringcloudApplication.class, args);
}
}
配置application文件,使得两个注册中心相互注册对方。
1).创建application-peer1.properties
server.port = 11111
spring.application.name=eureka-service
eureka.instance.hostname = peer1
eureka.client.register-with-eureka = true
eureka.client.fetch-registry = true
eureka.client.serviceUrl.defaultZone = http://peer2:11112/eureka/
2).创建application-peer2.properties
server.port = 11112
spring.application.name=eureka-service
eureka.instance.hostname = peer2
eureka.client.register-with-eureka = true
eureka.client.fetch-registry = true
eureka.client.serviceUrl.defaultZone = http://peer1:11111/eureka/
3).在C:\Windows\System32\drivers\etc\hosts下配置
127.0.0.1 peer1
127.0.0.1 peer2
4).分别启动两个注册服务中心
java -jar springcloud-0.0.1-SNAPSHOT.jar --spring.profiles.active = peer1
java -jar springcloud-0.0.1-SNAPSHOT.jar --spring.profiles.active = peer2
注册中心代码地址:https://github.com/dick1305/springcloud.git
2.一个高可用的服务提供者
1)POM文件
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
2)使项目具备服务提供者功能,添加@EnableDiscoveryClient
@EnableDiscoveryClient
@SpringBootApplication
public class SpringServer1Application {
public static void main(String[] args) {
SpringApplication.run(SpringServer1Application.class, args);
}
}
3)发布helloworld服务
@RestController
public class HelloWorldContrller {
@Autowired
private DiscoveryClient client;
@RequestMapping(value="/hellWorld",method = RequestMethod.GET)
public String hellWorld(String content) {
List<ServiceInstance> instanceLst=client.getInstances("eureka-service");
System.out.println("=====================================");
for( ServiceInstance s:instanceLst) {
System.out.println(s.getPort()+":"+s.getHost());
}
return "helloWold " +content;
}
}
4)配置application.properties
自动关联注册两个服务中心,防止单点故障
server.port = 22223
spring.application.name=eureka-helloWorld
eureka.client.serviceUrl.defaultZone = http://peer1:11111/eureka,http://peer1:11112/eureka
5)启动服务
java -jar spring-server1-0.0.1-SNAPSHOT.jar --server.port = 22223
java -jar spring-server1-0.0.1-SNAPSHOT.jar --server.port = 22222
代码地址:https://github.com/dick1305/eurekaServerExamble.git
3.构建一个使用ribbon负载均衡访问的客户端服务
1)POM
<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-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
2)使用@EnableDiscoveryClient 来注册发现服务,使用@LoadBalanced 来注解RestTemplate 提供访问服务提供者
@EnableDiscoveryClient
@SpringBootApplication
public class SpringRibbonConsumerApplication {
@Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(SpringRibbonConsumerApplication.class, args);
}
}
服务消费者访问服务提供者方法
@RestController
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
@RequestMapping(value="/consumerHellWorld",method = RequestMethod.GET)
public String consumerHellWorld(String content) {
return restTemplate.getForEntity("http://eureka-helloWorld/hellWorld?content="+content, String.class).getBody();
}
}
4)application.properties
spring.application.name = ribbon-consumer
server.port = 33333
eureka.client.serviceUrl.defaultZone = http://peer1:11111/eureka,http://peer1:11112/eureka
5)源代码:
https://github.com/dick1305/spring-ribbon-consumer-examble.git
5.查看服务界面
6.访问http://localhost:33333/consumerHellWorld?content=3333 查看消费者请求后的结果。
7.其他
服务续约:在组册完服务后,服务提供者会维护一个心跳来告诉Eureka Server 用例还存活。可以通过续约配置:
eureka.instance.lease-renewal-interval-in-seconds = 30 //30秒为服务续约时间
eureka.instance.lease-expiration-duraiton-in-seconds = 90 //定义服务失效时间90秒
服务消费者:在服务消费者会维护一份只读的服务清单来返回给客户端,通过Ribbon(轮询)方式调用。获取服务的参数:eureka.client.fetch-registry = true (默认为true)
缓存清单更新时间:eureka.client.registry-fecth-interval-seconds =30
- 大小: 72.2 KB
- 大小: 219.6 KB
分享到:
相关推荐
instance-id: ${spring.cloud.client.ip-address}:${server.port}:${spring.application.name} client: healthcheck: enabled: true register-with-eureka: false fetch-registry: false service-url: ...
针对史上最简单的 SpringCloud 教程http://blog.csdn.net/forezp/article/details/70148833 采用的技术不是最新的,写了一个最新技术的案例 采用最新springboot 2.0.3 、springcloud Finchley.RELEASE 开发
在接下来的内容中,我将详细描述标题《Spring Cloud Finchley.SR1-Spring Cloud 手册-Spring Cloud 文档》与《Spring Cloud 2.x手册-Spring Cloud 2.x 文档》以及标签“springCloud spring 微服务”中涉及的知识点。...
Spring Cloud Finchley是Spring Cloud的一个重要版本,它提供了一套微服务开发的工具集,用于构建分布式系统,如服务发现、配置管理、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式...
SpringCloud Finchley Gateway 统一异常处理是指在使用 SpringCloud Finchley 版本的 Gateway 时,如何统一处理系统级异常的方法。默认情况下,SpringCloud Gateway 会返回 HTML 格式的错误页面,而不是我们期望的 ...
在Spring Cloud Finchley版本中,由于其基于WebFlux的响应式架构,我们需要特别注意如何正确地实现这种缓存。 首先,我们需要创建一个`GatewayContext`类来存储请求中的缓存数据。这个类包含了缓存的Body、FormData...
Spring Cloud Finchley.RELEASE是Spring Cloud的一个重要版本,它提供了微服务开发所需的多种功能,使得构建分布式系统变得更加简单。这个版本的官方中文文档是开发者学习和应用Spring Cloud的关键资源,虽然文档是...
基于SpringCloud架构的可生产用的新零售商城系统源码.zip 完整源码,可运行。 项目描述 前后端分离的企业级微服务架构 基于Spring Boot 2.0.X、Spring Cloud Finchley和Spring Cloud Alibaba 深度定制Spring ...
### Spring Cloud Finchley.RELEASE中文参考手册知识点 #### Spring Cloud概述 Spring Cloud是基于Spring Boot的一套微服务开发工具集。它旨在加速分布式系统的开发,提供了一套简单的工具来快速实现一些常见的...
良心demo,可以再学习的过程中参考一下,官网的教程是真的需要好好琢磨的,这个可以作为辅助参考,demo采用的版本均为最新版本:springcloud2.0-Finchley.SR1版本,大神提醒我一句学习springcloud不要想的太复杂,...
springboot-swagger2、springcloud-configclient、springcloud-configserver、springcloud-consumer-feign、springcloud-consumer-feign-file、springcloud-consumer-feign-hystrix、springcloud-consumer-...
在构建基于Spring Cloud的微服务架构时,版本选型是一个至关重要的步骤,它直接影响到系统的稳定性和可维护性。Spring Cloud作为一个广泛使用的微服务框架,其版本迭代迅速,每个版本都有其特定的功能特性和生命周期...
SpringCloud Finchley三版本(M2-RELEASE-SR2)微服务实战-源码
spring cloud的pom文件,解决maven无法导入依赖的问题,spring-cloud-dependencies-Finchley.SR2.pom文件
基于Spring Cloud Finchley.SR1 网关基于 Spring Cloud Gateway 提供Consul 服务注册发现版本pigxc 最终一致性的分布式事务解决方案 图形化代码生成,不会vue也能做到敏捷开发 基于 Spring Security oAuth 深度定制...
用于通过GIT,SVN或具有Java 8,Spring Cloud Finchley M8,Spring Cloud Config Server和Spring Cloud Starter Bus,JUnit 4的Java 8的GIT,SVN或HashiCorp Vault进行配置的中央管理的配置主服务器 参考文件 配置...
读书笔记:Spring Cloud Finchley版 微服务实践教程
而SpringCloud Finchley则是SpringCloud的一个版本,它为开发者提供了在分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态)操作的开发...
Spring Cloud Greenwich SR2是这个系列的第二个服务修复版本(SR2),主要关注已知问题的修复和性能改进。使用官方文档,开发者可以深入了解每个组件的工作原理,以及如何在实际项目中有效利用这些功能来构建健壮的...