SpringCloud教程之Spring Cloud Eureka

1.Spring Cloud Eureka

Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件中的一部分, 它基于 NetflixEureka 做了二次封装, 主要负责完成微服务架构中的服务治理功能。

1.服务治理

服务治理可以说是微服务架构中最为核心和基础的模块, 它主要用来实现各个微服务实例的自动化注册与发现。

服务注册:在服务治理框架中, 通常都会构建一个注册中心, 每个服务单元向注册中心登记自己提供的服务,将主机与端口号、 版本号、 通信协议等一些附加信息告知注册中心, 注册中心按服务名分类组织服务清单。另外, 服务注册中心还需要以心跳的方式去监测清单中的服务是否可用, 若不可用需要从服务清单中剔除, 达到排除故障服务的效果。

服务发现:由于在服务治理框架下运作, 服务间的调用不再通过指定具体的实例地址来实现, 而是通过向服务名发起请求调用实现。 所以, 服务调用方在调用服务提供方接口的时候, 并不知道具体的服务实例位置。 因此, 调用方需要向服务注册中心咨询服务, 并获取所有服务的实例清单, 以实现对具体服务实例的访问。

2.搭建Eureka

2.1 创建总体Maven项目;

首先创建一个总的Maven项目来管理SpringCloud项目,并添加依赖,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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion><groupId>com.xcu</groupId>
    <artifactId>sc-f-chapter1</artifactId>
    <version>1.0-SNAPSHOT</version><parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
        <relativePath/>
    </parent><modules>
        <module>eureka-server</module>
        <module>service-hi</module>
    </modules><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>Finchley.RELEASE</spring-cloud.version>
    </properties><dependencies>
        <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.2 创建Eureka服务中心

2.2.1 右键创建总体Maven的Module

2.2.2 选择Eureka Server组件

2.2.3 查看pom.xml,已经添加了依赖

2.2.4 在SpringBoot启动类中添加注解@EnableEurekaServer

@EnableEurekaServer 注解启动一个服务注册中心提供给其他应用进行对话

2.2.5 配置application.yml

server:
  port: 8761
​
eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false 
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
​
spring:
  application:
    name: eurka-server

默认情况下,服务中心也会作为客户端来自己注册自己,所以配置eureka.client.registerWithEureka=false来关闭自我注册;

eureka.client.fetchregistry: 由于注册中心的职责就是维护服务实例,它并不需要去检索服务, 所以也设置为 false

2.2.6 启动查看

发现没有服务,因为我们并没有创建eureka-client

2.3 创建服务注册中心

2.3.1-2.3.4 请参考2.2创建服务中心的步骤,这里略过

创建完毕的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.2.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.xcu</groupId>
    <artifactId>service-hi</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>service-hi</name>
    <description>Demo project for Spring Boot</description><properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR3</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><dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </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.3.5 在启动类添加注解@EnableEurekaClient

@SpringBootApplication
@EnableEurekaClient
@RestController
public class ServiceHiApplication {
​
    public static void main(String[] args) {
        SpringApplication.run(ServiceHiApplication.class, args);
    }
​
    @Value("${server.port}")
    String port;
​
    @RequestMapping("/hi")
    public String home(@RequestParam(value = "name",defaultValue = "com.xcu")String name){
        return "hi "+name+ " ,i am form port:"+port;
    }
}
​

2.3.6 配置application.yml

server:
  port: 8762   #端口号
​
​
spring:
  application:
    name: service-hi  #服务名
​
​
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/  #服务注册中心的地址

2.3.7 启动项目并查看

完毕!

不忘初心,方得始终,以梦为马,不负韶华
原文地址:https://www.cnblogs.com/newz/p/12595576.html