Spring Cloud Eureka
版本:
spring boot :2.6.4
spring cloud : 2021.0.1
一、搭建服务注册中心
1、创建springboot工程
artifactid:eureka-server,勾选springcloud-discovery里面的eureka-server
pom.xml:
<?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 https://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.6.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.sww.eureka</groupId>
<artifactId>eureka-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eureka-server</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>2021.0.1</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</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>
</project>
2、在启动类上加注解
@EnableEurekaServer :开启eureka注册中心功能
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
3、添加配置
application.yml:
eureka:
client:
# 不向注册中心注册自己
register-with-eureka: false
# 关闭检索功能,只做注册(为微服务架构中的各个服务客户端而服务)
fetch-registry: false
service-url:
# 声明注册中心的注册地址
# 地址内容:http:// ip地址+eureka-server端口号/eureka
defaultZone: "http://localhost:8080/eureka"
server:
port: 8080
4、启动注册中心
在浏览器地址栏输入:http://localhost:8080,访问eureka注册中心
二、注册服务提供者
1、创建服务客户端实例
创建一个springboot项目,或者使用已有项目进行依赖添加
修改pom.xml,添加如下配置:
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>2021.0.1</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-eureka-client</artifactId>
</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>
2、在启动类上加注解
@EnableEurekaClient : 开启服务客户端功能
@SpringBootApplication
@EnableSwagger2Doc
@EnableEurekaClient
public class SwaggerDemoApplication {
public static void main(String[] args) throws IOException {
SpringApplication.run(SwaggerDemoApplication.class, args);
}
}
3、添加配置
application.yml:
eureka:
client:
service-url:
defaultZone: "http://localhost:8080/eureka" #声明注册中心的地址
4、启动服务客户端
观察eureka注册中心,注册进来了一个服务
三、高可用注册中心
上面的eureka注册中心只有一个,一旦发生故障,则系统不可用。马丁福勒关于微服务的论文中说到,要去中心化治理,这样一个核心的注册中心显然不能满足高可用的需求。于是,我们来搭建一个有多个eureka注册中心组成的eureka集群。
1、再创建一个springboot项目以搭建第二个服务注册中心
(步骤同:一、搭建服务 注册中心),yml文件如下:
# 取名eureka-server,端口:8081
server:
port: 8081
spring:
application:
name: eureka-server
eureka:
client:
service-url:
defaultZone: "http://localhost:8081/eureka,http://localhost:8080/eureka/"
2、修改第一个注册中心的yml文件
注意: 去掉了两个false,defaultZone也修改了,让注册中心互相注册,互相发现,
eureka:
client:
service-url:
defaultZone: "http://localhost:8081/eureka,http://localhost:8080/eureka/"
spring:
application:
name: eureka-server
server:
port: 8080
3、启动两个注册中心,服务提供方,观察变化。
四、服务发现与消费
上面创建了3个springboot项目,分别是服务注册中心和服务提供方(服务生产者),但没有消费者。下面创建服务消费者去调用服务生产者提供的服务。一个服务客户端既可以是生产者也可以是消费者。
1、创建springboot项目
(1)、pom.xml:
早些时候的文章或书会让大家添加ribbon以来,但是在最新的spring cloud 官方文档中,已明确表示ribbon正处在维护模式,负载均衡默认的实现clienr为BlockingLoadBalancerClient(这是eureka-client依赖自动传递的),若项目中添加了ribbon依赖则会报错。
<?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 https://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.6.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.sww.eureka</groupId>
<artifactId>ribbon-consumer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>ribbon-consumer</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>2021.0.1</spring-cloud.version>
</properties>
<dependencies>
<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>
</project>
(2)、启动类:
restTemplate 这段方法是自己添加的
@EnableEurekaClient
@SpringBootApplication
public class RibbonConsumerApplication {
@Bean
@LoadBalanced // 使用默认的负载均衡策略
public RestTemplate getRestTemplate(RestTemplateBuilder builder){
return builder.build();
}
public static void main(String[] args) {
SpringApplication.run(RibbonConsumerApplication.class, args);
}
}
(3)、application.yml
spring:
application:
name: consumer
server:
port: 901
eureka:
client:
service-url:
defaultZone: "http://localhost:8080/eureka/,http://localhost:8081/eureka/"
(4)、编写一个消费服务的controller
其中,restTmplate 是spring提供的代理发出http请求并处理返回结果的对象。
discoveryClient是用来检查注册中心是否已经成功注册了swagger-demo这个服务,我这里使用了另外一个服务提供者。
@RestController
@RequestMapping("/consumer")
public class ConsumerController {
@Autowired
private RestTemplate restTemplate ;
@Autowired
private DiscoveryClient discoveryClient;
@GetMapping("/add")
public String testAddUser(){
System.out.println(discoveryClient.getInstances("swagger-demo"));
return restTemplate.getForEntity("http://swagger-demo/user/add",String.class).getBody();
}
}
2、启动项目,并在浏览器访问
eureka在线镜像
转载文章标签 eureka在线镜像 spring java maven intellij-idea 文章分类 云原生 云计算
上一篇:java原生创建命名空间
-
文件预览-文档在线转换-wps在线预览-文件预览在线查看
office文件及文档在线预览 提供office在线预览及PDF在线预览服务,支持Word文档在线预览、Excel在线预览、PowerPoint在线预览、WPS等Office文件在线预览,支持所有浏览器及移动设备Mobile预览,无需安装ActiveX控件,无需客户端部署即可实现办公文档在线预览。
在线预览 office365 在线Office 篇七:网页在线预览编辑 Office在线预览 word在线预览 -
Spring Cloud 入门到进阶 - 01 搭建Eureka服务环境
Spring Cloud 入门到进阶 - 01 搭建Eureka服务环境
spring spring cloud 微服务 eureka 注册中心