SpringCloud学习-(2)服务的注册与发现(Eureka)

前面SpringBoot已经介绍了SpringBoot相关使用,如果对SpringBoot不了解可以先看一下。

1.SpringCloud介绍
SpringCloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等,运行环境简单。SpringCloud是基于SpringBoot的。

2.创建服务注册中心
在这里,我们需要用的的组件上Spring Cloud Netflix的Eureka ,eureka是一个服务注册和发现模块【这里使用的是IDEA工具创建,Eclipse具体可以直接创建Maven,然后引入相应的jar包即可】

2.1 首先创建一个maven主工程。
File->New->Project->Spring Initializr->Next
这里写图片描述

填写GroupId:com.tangjinyi
填写ArtifactId:springcloud-eureka-server

这里写图片描述

继续,选择->Cloud Discovery->Eureka Server。

项目创建完成后的目录结构如下:
这里写图片描述

由于IDEA版本的问题,所以使用的SpringBoot版本也都不一样,我这里工具默认使用的是SpringBoot2.0.1.RELEASE版本,在引入jar包上与1.x版本有一定的区别,详见在配置文件里面的说明:

<?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.tangjinyi</groupId>
    <artifactId>springcloud-eureka-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>springcloud-eureka-server</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.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>Finchley.M9</spring-cloud.version>
    </properties>

    <dependencies>
        <!--springboot1.x使用的是该jar包,2.x在artifactId中加入了netflix,所以在使用的时候要看清楚版本号
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
        </dependency>
        -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

        <!--对eureka控制台设置访问权限-->
        <!--<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</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>

    <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>

2.2配置文件application.properties和application.yml
springcloud提供了两种配置文件可供选择,分别是.properties和.yml。名称都是固定的不要随便修改。
网上很多资料都是使用.yml配置文件,本人习惯使用.properties配置文件。并没有太多的差异,可根据个人喜好选择。
如果使用maven构建的工程,该配置文件应放置在resources目录下。

#设置eureka服务的端口号
server.port=8761
#设置eureka服务访问的host
eureka.instance.hostname=localhost
#默认情况下erureka server也是一个eureka client ,必须要指定一个 server。通过eureka.client.registerWithEureka:false和fetchRegistry:false来表明自己是一个eureka server.
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false


#对eureka控制台设置访问权限
#spring.security.user.name=root
#spring.security.user.password=123456
#eureka.client.service-url.defaultZone=http://root:123456@localhost:8761/eureka/

eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/

2.3启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class SpringcloudEurekaServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringcloudEurekaServerApplication.class, args);
    }
}

前面 SpringCloud学习-(1)扫盲 介绍了@SpringBootApplication注解。
@SpringBootApplication=@Configuration+@ComponentScan+@EnableAutoConfiguration@ComponentScan默认扫描与SpringcloudEurekaServerApplication 类同级和下级的目录,所以SpringcloudEurekaServerApplication的位置一定要注意。@EnableEurekaServer注解表示启动一个eureka服务注册中心。

2.4启动eureka服务注册中心
直接右键run as SpringcloudEurekaServerApplication 类即可启动eureka服务。

2018-05-21 14:27:41.649  INFO 6152 --- [           main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@5c6648b0: startup date [Mon May 21 14:27:41 CST 2018]; root of context hierarchy
2018-05-21 14:27:41.836  INFO 6152 --- [           main] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
2018-05-21 14:27:41.871  INFO 6152 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'configurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$d4245eb4] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.0.1.RELEASE)

2.5访问eureka后台界面
eureka服务启动完毕后,打开浏览器访问http://localhost:8761,打开eureka服务注册中心管控台如下:

这里写图片描述

No application available 没有服务被发现 ……
因为没有注册服务当然不可能有服务被发现了。

3.创建服务提供者

3.1按照创构eureak server的方式再创建一个client工程
GroupId:com.tangjinyi
ArtifactId:springcloud-eureka-client1
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.tangjinyi</groupId>
    <artifactId>springcloud-eureka-client1</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>springcloud-eureka-client1</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.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>Finchley.M9</spring-cloud.version>
    </properties>

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


        <!--<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-ribbon</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>${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>

    <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>

3.2修改配置文件application.properties

#eureka.client.service-url.defaultZone=http://root:123456@localhost:8761/eureka/
#eureka注册中心的访问地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
#服务提供者提供的服务端口
server.port=8762
#服务提供者的提供的服务名为service-sayHello
spring.application.name=service-sayHello

3.3修改启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.beans.factory.annotation.Value;

@SpringBootApplication
@EnableDiscoveryClient
@RestController
public class SpringcloudEurekaClient1Application {


    public static void main(String[] args) {
        SpringApplication.run(SpringcloudEurekaClient1Application.class, args);
    }

    @Value("${server.port}")
    private String port;

    @RequestMapping(value = "/sayHello")
    public String sayHello(@RequestParam String name){
        return "hello "+name+",port:"+port;
    }
}

@RestController注解在springboot系列中已经介绍过了,添加该注解表示提供Rest服务。
@EnableDiscoveryClient注解就是将服务注册到eureka注册中心上。还有一个注解@EnableEurekaClient也可以使用,其效果同@EnableDiscoveryClient,但是@EnableEurekaClient注解只能适用于eureka注册中心,而@EnableDiscoveryClient则是一个通用注解。所以这里我们选择通用的注解使用。

3.4启动服务提供者
仍然是右键run as SpringcloudEurekaClient1Application。

3.5注册服务查看

服务提供者启动完毕后,查看eureka注册中心

这里写图片描述
服务提供者service-sayHello已经注册到eureka注册中心上。

3.6测试service-sayHello服务

由前面的配置可以知道服务的端口是8762,服务的访问路径为sayHello,服务传递的参数为name
打开浏览器,访问http://localhost:8762/sayHello?name=eurekaclient
这里写图片描述

到此,一个简单的eureka服务注册和发现小例子就完成了。

猜你喜欢

转载自blog.csdn.net/jinjin603/article/details/80392994