SpringCloud教程一:服务注册与发现(Eureka)

来源:互联网 发布:怎样淘宝网购详细步骤 编辑:程序博客网 时间:2024/05/16 10:12

Spring Cloud

Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线)。分布式系统的协调导致了样板模式, 使用Spring Cloud开发人员可以快速地支持实现这些模式的服务和应用程序。他们将在任何分布式环境中运行良好,包括开发人员自己的笔记本电脑,裸机数据中心,以及Cloud Foundry等托管平台。

特性

Spring Cloud专注于提供良好的开箱即用经验的典型用例和可扩展性机制覆盖。

  • 分布式/版本化配置

  • 服务注册和发现

  • 路由

  • service - to - service调用

  • 负载均衡

  • 断路器

  • 分布式消息传递

SpringCloud分布式开发五大神兽    服务发现——Netflix Eureka    客服端负载均衡——Netflix Ribbon    断路器——Netflix Hystrix    服务网关——Netflix Zuul    分布式配置——Spring Cloud Config

创建服务注册中心eureka server

在这里,我们需要用的的组件上Spring Cloud Netflix的Eureka ,eureka是一个服务注册和发现模块。

1:首先创建一个主maven工程

2:在1创建的的工程中创建model,名称为server,作为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 http://maven.apache.org/xsd/maven-4.0.0.xsd">   <modelVersion>4.0.0</modelVersion>   <groupId>com.springcloud</groupId>   <artifactId>server</artifactId>   <version>0.0.1-SNAPSHOT</version>   <packaging>jar</packaging>   <name>server</name>   <description>Demo project for Spring Boot</description>   <parent>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starter-parent</artifactId>      <version>1.5.8.RELEASE</version>      <relativePath/> <!-- lookup parent from repository -->   </parent>   <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>Edgware.RELEASE</spring-cloud.version>   </properties>   <dependencies>      <!--eureka server -->      <dependency>         <groupId>org.springframework.cloud</groupId>         <artifactId>spring-cloud-starter-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>

4.启动服务注册中心,创建完成后的pom.xml如下
只需要一个注解@EnableEurekaServer,这个注解需要在springboot工程的启动application类上加


/** * 启动一个服务注册中心 * * @author wang_ */@EnableEurekaServer@SpringBootApplicationpublic class ServerApplication {    public static void main(String[] args) {        SpringApplication.run(ServerApplication.class, args);    }}
5:修改配置文件:

#端口号server.port= 7080#eureka.instance.hostname= localhost##false来表明自己是一个eureka servereureka.client.register-with-eureka=false  ##false来表明自己是一个eureka servereureka.client.fetch-registry=falseeureka.client.service-url.defaultZone= http://${eureka.instance.hostname}:${server.port}/eureka/#关闭springboot自带的iocspring.mvc.favicon.enabled = false
6:启动工程,访问http://127.0.0.1:7080/


因为现在没有注册服务,所以显示没有服务被发现

创建服务提供者eureka client

当client向server注册时,它会提供一些元数据,例如主机和端口,URL,主页等。Eureka server 从每个client实例接收心跳消息。 如果心跳超时,则通常将该实例从注册server中删除。

1:创建过程同server大致相同,创建完成后pomr如下:
<name>client</name><description>Demo project for Spring Boot</description><parent>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-parent</artifactId>    <version>1.5.8.RELEASE</version>    <relativePath/> <!-- lookup parent from repository --></parent><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-services.version>1.5.0.RELEASE</spring-cloud-services.version>    <spring-cloud.version>Edgware.RELEASE</spring-cloud.version></properties><dependencies>    <dependency>        <groupId>org.springframework.cloud</groupId>        <artifactId>spring-cloud-starter-eureka</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>    </dependency></dependencies><dependencyManagement>    <dependencies>        <dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-dependencies</artifactId>            <version>Dalston.RC1</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><repositories>    <repository>        <id>spring-milestones</id>        <name>Spring Milestones</name>        <url>https://repo.spring.io/milestone</url>        <snapshots>            <enabled>false</enabled>        </snapshots>    </repository></repositories>

主程序如下通过注解@EnableEurekaClient 表明自己是一个eurekaclient.
创建完成后的pom.xml如下
/** * @author wang_ * @EnableEurekaClient 表明自己是一个eurekaclient. */@SpringBootApplication@EnableEurekaClient@RestControllerpublic class ClientApplication {    public static void main(String[] args) {        SpringApplication.run(ClientApplication.class, args);    }    @Value("${server.port}")    String port;    @RequestMapping("/hi")    public String home(@RequestParam String name) {        return "hi "+name+",i am from port:" +port;    }}
修改配置文件如下:

eureka.client.service-url.defaultZone= http://localhost:7080/eureka/server.port= 8082spring.application.name= service-hi#在application.properties加入认证的用户名和密security.user.name=rootsecurity.user.password=123456

需要指明spring.application.name,这个很重要,这在以后的服务与服务之间相互调用一般都是根据这个name 

,启动工程,再次访问http://127.0.0.1:7080/


可以发现有一个服务已经注册了,服务名称和端口号都显示在浏览器中


f访问:
http://127.0.0.1:8082/hi?name=%E7%8E%8B

返回结果:hi 王,i am from port:8082

创建完成后的pom.xml如下
阅读全文
0 0