SpringCloud学习心得——Eureka注册中心
时间:2019-10-22
本文章向大家介绍SpringCloud学习心得——Eureka注册中心,主要包括SpringCloud学习心得——Eureka注册中心使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
SpringCloud学习心得——Eureka注册中心
定义
Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分,基于 REST 的服务,并且提供了基于 Java 的客户端组件,主要负责实现微服务架构中的服务治理功能。
与Zookeeper区别与联系
CAP 定理:即 C 为数据一致性;A 为服务可用性;P 为服务对网络分区故障的容错性。这三个特性在任何分布式系统中都不能同时满足,最多同时满足两个。
Eureka 是基于 AP 原则构建的,而 ZooKeeper 是基于 CP 原则构建的。
- Zookeeper 有一个 Leader,而且在这个 Leader 无法使用的时候通过 Paxos(ZAB)算法选举出一个新的 Leader。这个 Leader 的任务就是保证写数据的时候只向这个 Leader 写入,Leader 会同步信息到其他节点。通过这个操作就可以保证数据的一致性。
- 去 Eureka 中去拉取服务列表,查看你调用的服务在不在其中,在的话就拿到服务地址、端口等信息,然后调用。
搭建Eureka中心
创建maven项目,添加如下依赖
<!-- Spring Boot --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.6.RELEASE</version> <relativePath /> </parent> <dependencies> <!-- eureka --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies> <!-- Spring Cloud --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley.SR2</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
261<!-- Spring Boot -->
2<parent>
3<groupId>org.springframework.boot</groupId>
4<artifactId>spring-boot-starter-parent</artifactId>
5<version>2.0.6.RELEASE</version>
6<relativePath />
7</parent>
8<dependencies>
9<!-- eureka -->
10<dependency>
11<groupId>org.springframework.cloud</groupId>
12<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
13</dependency>
14</dependencies>
15<!-- Spring Cloud -->
16<dependencyManagement>
17<dependencies>
18<dependency>
19<groupId>org.springframework.cloud</groupId>
20<artifactId>spring-cloud-dependencies</artifactId>
21<version>Finchley.SR2</version>
22<type>pom</type>
23<scope>import</scope>
24</dependency>
25</dependencies>
26</dependencyManagement>
添加启动类
@EnableEurekaServer @SpringBootApplication public static void main(String[] args) { SpringApplication.run(EurekaServer Application.class, args); } }
123public static void main(String[] args) {
4SpringApplication.run(EurekaServer Application.class, args);
5}
6}
添加配置文件
spring: application: name: myEureka-Server server: port: 8761 eureka: client: # 因为自己是主机,所以不向自己注册 register-with-eureka: false # 自己就是注册中心,所以不用去检索服务 fetch-registry: false
1spring
2application
3name myEureka-Server
45server
6port8761
78eureka
9client
10# 因为自己是主机,所以不向自己注册
11register-with-eurekafalse
12# 自己就是注册中心,所以不用去检索服务
13fetch-registryfalse
运行,并访问,http://localhost:8761
创建服务提供者
创建项目注册到Eureka
- 新建maven项目,引入依赖
- 311
<parent>
2<groupId>org.springframework.boot</groupId>
3<artifactId>spring-boot-starter-parent</artifactId>
4<version>2.0.6.RELEASE</version>
5</parent>
6<dependencies>
78<dependency>
9<groupId>org.springframework.boot</groupId>
10<artifactId>spring-boot-starter-web</artifactId>
11</dependency>
1213<dependency>
14<groupId>org.springframework.cloud</groupId>
15<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
16</dependency>
1718</dependencies>
1920<!-- Spring Cloud -->
21<dependencyManagement>
22<dependencies>
23<dependency>
24<groupId>org.springframework.cloud</groupId>
25<artifactId>spring-cloud-dependencies</artifactId>
26<version>Finchley.SR2</version>
27<type>pom</type>
28<scope>import</scope>
29</dependency>
30</dependencies>
31</dependencyManagement>
- 创建启动类,注意,此处在启动类上的注解是@EnableDiscoveryClient
@EnableDiscoveryClient @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
7123public class Application {
4public static void main(String[] args) {
5SpringApplication.run(Application.class, args);
6}
7}
- 添加测试接口
@RestController @RequestMapping("/user") public class UserController { @GetMapping("/hello") public String sayHello(){ return "hello"; } }
912"/user") (
3public class UserController {
45"/hello") (
6public String sayHello(){
7return "hello";
8}
9}
- 增加配置文件
server: port: 8081 spring: application: name: myEureka-Service eureka: client: #这次要注册到eureka上 register-with-eureka: true serviceUrl: defaulZone: "http://localhost:8761/eureka/" instance: #采用ip注册的方式 prefer-ip-address: true #id的格式 instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
181server
2port8081
34spring
5application
6name myEureka-Service
78eureka
9client
10#这次要注册到eureka上
11register-with-eurekatrue
12serviceUrl
13defaulZone"http://localhost:8761/eureka/"
14instance
15#采用ip注册的方式
16prefer-ip-addresstrue
17#id的格式
18instance-id $ spring.application.name $ spring.cloud.client.ip-address $ server.port
- 启动成功,去eureka看一下,发现了8762的服务
创建消费者
- 创建maven项目,eureka-consumer,添加相同依赖与启动类,但要更改配置文件
spring.application.name=eureka-client-article-service server.port=8082
21spring.application.name=eureka-client-article-service
2server.port=8082
- 使用RestTemplate获取Rest服务端调用接口
@Configuration public class BeanConfiguration { @Bean public RestTemplate getRestTemplate() { return new RestTemplate(); } }
71@Configuration
2public class BeanConfiguration {
3@Bean
4public RestTemplate getRestTemplate() {
5return new RestTemplate();
6}
7}
- 创建接口
@RestController public class ArticleController { @Autowired private RestTemplate restTemplate; @GetMapping("/article /callHello") public String callHello() { return restTemplate.getForObject("http://localhost:8081/user/hello", String.class); } }
91@RestController
2public class ArticleController {
3@Autowired
4private RestTemplate restTemplate;
5@GetMapping("/article /callHello")
6public String callHello() {
7return restTemplate.getForObject("http://localhost:8081/user/hello", String.class);
8}
9}
- 调用
- 改造
- 我们的目的是通过服务调用,而不要关心端口
- 改造 RestTemplate 的配置,添加一个 @LoadBalanced 注解,这个注解会自动构造 LoadBalancerClient 接口的实现类并注册到 Spring 容器中
@Configuration public class RestTemplateConfig { @Bean @LoadBalanced public RestTemplate getRestTemplate(){ return new RestTemplate(); } }
91@Configuration
2public class RestTemplateConfig {
34@Bean
5@LoadBalanced
6public RestTemplate getRestTemplate(){
7return new RestTemplate();
8}
9}
- 接下来就是改造调用代码,我们不再直接写固定地址,而是写成服务的名称,这个名称就是我们注册到 Eureka 中的名称,是属性文件中的 spring.application.name
@GetMapping("/callHello") public String callHello() { return restTemplate.getForObject("http://myEureka-Service/user/hello", String.class); }
41"/callHello") (
2public String callHello() {
3return restTemplate.getForObject("http://myEureka-Service/user/hello", String.class);
4}
调用成功,舒服了
原文地址:https://www.cnblogs.com/pipicai96/p/11719136.html
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Java——Stream数据流
- JavaWeb——MyBatis框架之连接池原理、MyBatis事务提交设置、动态SQL语法总结
- 8种ETL算法归纳总结,看完这些你就全明白了
- JavaWeb——Maven基础之详细总结,从零开始搭建Maven工程,包含一些常见的坑org.eclipse.jdt.internal.compiler.classfmt.ClassFormatEx
- JavaWeb——Redis数据库之Jedis操作5种类型数据的使用总结与前端Ajax获取Redis缓存数据的案例实战(结合了MySQL数据库)
- Java——数据库编程JDBC之快速入门吐血总结及各关键对象详解(提供了JDBCUtils工具类)
- MySQL数据库——事务的操作(开启、回滚、提交)、特征、隔离级别基础总结
- MySQL数据库——数据库的设计(多表之间的关系与三大范式)与备份还原
- JavaWeb——JSP入门学习(JSP基本概念、JSP脚本、JSP内置对象)
- MySQL数据库——数据库CRUD之基本DML增删改表操作及DQL查表操作
- JavaWeb——AJAX异步技术实现方式与案例实战(原生的JS方式、使用JQuery方式)
- JavaWeb——一文带你入门Servlet(生命周期、注解配置方法、IDEA与tomcat的相关配置)
- JavaWeb——JQuery之基础案例实战(实现表格隔行换色、实现全选全不选、QQ表情选择、下拉列表选中条目左右选择功能)
- JavaWeb——JQuery之DOM操作应用及实践案例总结(DOM内容操作、DOM属性操作、CRUD操作)
- JavaWeb——Filter过滤器快速入门与是否登录验证&过滤敏感词汇案例实战(Filter配置方式、执行流程、生命周期方法、过滤器链)