eureka
什么是eureka
服务调用流程
spring cloud的技术栈应用
服务治理
服务发现的两种方式–客户端服务发现
##服务发现的两种方式–服务端 服务发现
服务治理对比
CAP ACID BASE
CAP
BASE
部署eureka项目
maven
<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>org.example</groupId>
<artifactId>muse-eureka</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.14.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<name>muse-eureka</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<!-- <spring-cloud.version>2020.0.0</spring-cloud.version>-->
<spring-cloud.version>Greenwich.SR6</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</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>
</project>
application启动类
@EnableEurekaServer
@SpringBootApplication
public class App
{
public static void main( String[] args )
{
SpringApplication.run(App.class,args);
}
}
properties配置文件
server.port=8080
eureka.instance.hostname=localhost
eureka.client.service-url.defaultZone=http://localhost:8080/eureka/
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
部署eureka-client-producer
maven
<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>org.example</groupId>
<artifactId>muse-eureka</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.14.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<name>muse-eureka</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<!-- <spring-cloud.version>2020.0.0</spring-cloud.version>-->
<spring-cloud.version>Greenwich.SR6</spring-cloud.version>
</properties>
<dependencies>
<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-web</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>
</project>
配置文件
spring.application.name=eureka-client-producer
server.port=7002
eureka.client.service-url.defaultZone=http://localhost:8080/eureka/
controller类
@RestController
public class HelloController {
@Resource
private Registration registration;
@Resource
private DiscoveryClient discoveryClient;
private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@GetMapping("/hello")
public String hello() {
List<ServiceInstance> instances = discoveryClient.getInstances(registration.getServiceId());
instances.forEach(data -> {
System.out.println(String
.format("%s INFO /hello-%s serviceId=%s port=%s",
sdf.format(new Date()),
data.getHost(),
data.getServiceId(),
data.getPort()));
});
return "hello world";
}
}
部署eureka-client-consumer
maven依赖
<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>org.example</groupId>
<artifactId>muse-eureka</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.14.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<name>muse-eureka</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<!-- <spring-cloud.version>2020.0.0</spring-cloud.version>-->
<spring-cloud.version>Greenwich.SR6</spring-cloud.version>
</properties>
<dependencies>
<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-web</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>
</project>
配置文件
spring.application.name=eureka-client-consumer
server.port=7003
eureka.client.service-url.defaultZone=http://localhost:8080/eureka/
启动类 加上restTemplate
@EnableEurekaClient
@SpringBootApplication
@Configuration
public class App
{
public static void main( String[] args )
{
SpringApplication.run(App.class,args);
}
@Bean
@LoadBalanced
RestTemplate restTemplate(){
return new RestTemplate();
}
}
controller
@RestController
public class HelloController {
@Resource
private RestTemplate restTemplate;
@GetMapping("/hello")
public String hello() {
return restTemplate.getForEntity(
"http://eureka-client-producer/hello",
String.class).
getBody();
}
}
eureka集群
除了配置文件跟单机的eureka不同 其他都无区别
配置文件
server.port=8082
spring.application.name=eureka-cluster #项目名称要相同
eureka.instance.hostname=cluster2 #实例名不同
#eureka.client.service-url.defaultZone=http://localhost:8080/eureka/
eureka.client.service-url.defaultZone=http://cluster1:8081/eureka/
eureka.client.register-with-eureka=true #一定为true或者不写 才会注册服务
eureka.client.fetch-registry=true #一定为true或者不写 才会去检索服务
server.port=8081
spring.application.name=eureka-cluster
eureka.instance.hostname=cluster1
#eureka.client.service-url.defaultZone=http://localhost:8080/eureka/
eureka.client.service-url.defaultZone=http://cluster2:8082/eureka/
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
eureka集群架构