SpringCloud 学习实战(一)--服务的注册与发现(Eureka)

有空学习了一下SpringCloud,根据大神(这篇很详细,都是干货点击打开链接)的经验自己实际操作了一下,依然踩了很多坑,所以总结一下,以免忘记。


1.SpringCloud简介

spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。它运行环境简单,可以在开发人员的电脑上跑。结合springboot 做微服务架构开发,是目前很火的架构,简单方便。

2.Eureka

eureka是一个服务注册和发现模块。包括Eureka ServerEureka Client,客户端注册服务到服务端,这样就能发现并监测。

3.Eureka Server 服务搭建

3.1 新建一个springboot项目(maven项目,打jar包) eurekaserver,pom文件如下:

<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.yuanyuan</groupId>
  <artifactId>eurekaserver</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>eurekaserver</name>
  <description>Demo project for Spring Boot</description>
  <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.2.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>
    </properties>

    <dependencies>
        <!--eureka server -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
        </dependency>

        <!-- spring boot test-->
        <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.RELEASE</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>
</project>
tips: 

(1)springboot版本最好用1.5.2.RELEASE,版本太新会出现各种问题,已踩过坑。

(2)对应springcloud版本Dalston.RELEASE,我之前参考大神的用Dalston.RC1发现找不到类,注解@EnableEurekaServer无法引入,改了版本之后一切正常。

3.2 springboot启动类如下:

@EnableEurekaServer
@SpringBootApplication
public class EurekaserverApplication 
{
    public static void main( String[] args )
    {
        SpringApplication.run(EurekaserverApplication.class, args);
    }
}

3.3 eureka是一个高可用的组件,它没有后端缓存,每一个实例注册之后需要向注册中心发送心跳(因此可以在内存中完成),在默认情况下erureka server也是一个eureka client ,必须要指定一个 server。

eureka server的配置文件appication.yml:

server:
  port: 8761

eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

通过eureka.client.registerWithEureka:false和fetchRegistry:false来表明自己是一个eureka server而不是eureka client

3.4 启动项目,访问http://localhost:8761/,可以看到Eureka的主页面,这个时候没有服务注册,所以也没有服务被发现。


到这里,eureka server就成功了,下面再搭建eureka client .

4. eureka client 搭建

4.1 新建springboot项目 eurekaclient,pom文件如下:
<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.yuanyuan</groupId>
  <artifactId>eurekaclient</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>eurekaclient</name>
  <description>Demo project for Spring Boot</description>
  <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.2.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>
    </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.RELEASE</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>
</project>

4.2 pringboot启动类如下:

package com.yuanyuan.eurekaclient;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * Hello world!
 *
 */
@RestController
@SpringBootApplication
@EnableEurekaClient
public class EurekaclientApplication 
{
    public static void main( String[] args )
    {
        SpringApplication.run(EurekaclientApplication.class, args);
    }
    
    @Value("${server.port}") //读取配置文件中的Port
    String port;
    
    @RequestMapping("/hi")
    public String sayHi(@RequestParam String name) {
    	return "hi" + name + ",my port is:" + port;
    }
}
通过注解@EnableEurekaClient 表明自己是一个eureka client.
接口+启动类,写了一个简单的接口,方便访问测试。

4.3 application.yml :

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
server:
  port: 8762
spring:
  application:
    name: service-hi

除了@EnableEurekaClient 注解,还需要在配置文件中指定自己的服务注册中心的地址。

tips:

application name 是一个很重要的属性,这个指定了当前服务的名称,通过这个的名称可以找到对应的服务,因此该名称需要在整个项目中是唯一可识别的。

4.4 启动项目,访问http://localhost:8762/hi?name=yuanyuan 可以看到:


到这eureka client搭建成功,再次刷新server(http://localhost:8761/)如下:


这时候已经有一个服务已经注册在服务中了,服务名为SERVICE-HI ,端口为8762

阅读更多
个人分类: springcloud
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭