小白云学java| SpringCloud (1) | 服务的注册与发现(Eureka)

hi,我是小白云Casy,这是我的Java学习笔记。

上章节大概跑起来了一个springboot:小白云0基础学java|如何用springboot构建一个web工程?
这一接来学习SpringCloud吧!
今天的目标是:注册和发现Eureka服务,向着目标冲冲冲!!!
在这里插入图片描述

SpringCloud的概念摘抄:

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

本章节主要是讲Eureka ,所以介绍一下Eureka :

Spring Cloud Netflix的Eureka 是一个服务注册和发现模块。

那到底要怎么搞呢?动动我的可爱小手开始操作啦~~~~~

  • 首先创建一个maven主工程。
    在这里插入图片描述在这里插入图片描述目录结构如下:
    在这里插入图片描述创建完成后,更改下面的pom.xml的配置,在其中引入依赖。
    spring Boot版本为2.0.3.RELEASE,Spring Cloud版本为Finchley.RELEASE。这个pom文件作为父pom文件,起到依赖版本控制的作用,其他module工程继承该pom。这一系列文章全部采用这种模式,其他文章的pom跟这个pom一样。再次说明一下,以后不再重复引入。代码如下:
<?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>luo</groupId>
<artifactId>casy</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>

<name>sc-f-chapter1</name>
<description>Demo project for Spring Boot</description>

<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个model,一个model工程作为服务注册中心,即Eureka Server,另一个作为Eureka Client。

下面以创建server为例子,详细说明创建过程:

右键工程->创建model-> 选择spring initialir 如下图:

在这里插入图片描述下一步->选择cloud discovery->eureka server ,然后一直下一步就行了。
在这里插入图片描述在这里插入图片描述创建完后的工程,其pom.xml不需要修改。

只需要在main下面的 DemoApplication中,加上一个注解 @EnableEurekaServer,就能启动一个服务注册中心了:

package com.example.demo;

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

@SpringBootApplication
@EnableEurekaServer    // 只需要加上这个注解,就能启动一个服务注册中心
public class DemoApplication {

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

}

另外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/


配置的解释说明:
在这里插入图片描述启动DemoApplication .java运行一下,看到如下结果,说明运行成功。

在这里插入图片描述
尝试访问一下网址:http://localhost:8761/
结果如下:
在这里插入图片描述可以看到,eureka的服务端已经启动起来了!!! 好开熏~~~~~~~~~~

Application里面是空的,因为还没有客户端在里面注册,所以接下来我们创建客户端:

创建的入口同上sever的创建:
在maven主工程目录下,点右键->创建model-> 选择spring initialir
然后在这一步,选择的是这两项,与上面有区别哦~,重点是:选的Eureka Discover Client

在这里插入图片描述可以看到,创建完后的工程,其pom.xml默认生成的,不用动。
在HahaApplication.java中,通过注解@EnableEurekaClient 表明自己是一个eurekaclient.
再加点简单的代码,如下:

package modelclient.haha;

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;

@SpringBootApplication
@EnableEurekaClient   //通过注解@EnableEurekaClient 表明自己是一个eurekaclient.
public class HahaApplication {

    public static void main(String[] args) {
        SpringApplication.run(HahaApplication.class, args);
    }
    @Value("${server.port}")
    String port;

    @RequestMapping("/hi")
    public String home(@RequestParam(value = "name", defaultValue = "haha") String name) {
        return "hi " + name + " ,i am from port:" + port;
    }


}

仅仅@EnableEurekaClient是不够的,还需要在配置文件中注明自己的服务注册中心的地址,application.yml配置文件如下:


eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
server:
  port: 8764
spring:
  application:
    name: test

配置文件说明:
在这里插入图片描述

红:指明client的server地址
黄:client的服务端口号
绿:client的应用名称

需要指明**spring.application.name,这个很重要,**这在以后的服务与服务之间相互调用一般都是根据这个name ,访问http://localhost:8761/ 可以看到,一个名字为TEST的应用,已经注册在Eureka Server上面了,没错,这个TEST来源于spring.application.name的配置。
在这里插入图片描述接着,我们可以尝试访问一下这个client:

那么怎么访问呢?先看代码:
路由是:/casy
参数是:name=

在这里插入图片描述
端口是:8762

在这里插入图片描述
所以访问方式如下:
http://localhotst:8761/casy?name=casy

/casy 的对应关系如下:
在这里插入图片描述在这里插入图片描述ok,今天的学习大功告成了!!!!

总结一下:
先创建一个maven主工程,再创建一个Eureka server 做为注册中心,注册中心1个就好,然后可以在上面注册多个client,也就是应用,例如下面的是我练习的,一个注册中心上面注册了3个叫做CASY的应用:

在这里插入图片描述画个图象形点:
在这里插入图片描述标记Server和Client的区别有3处:
1.创建spring时候第3步的勾选,还记得吗? 这里影响pom.xml的配置。
在这里插入图片描述
2.java代码中的注解:@EnableEurekaClient 和 EnableEurekaServer
3.配置文件bootstrap.yml和 application.yml中的配置。

就这么多知识点啦~~~~

-------最后的Q&A------

过程中遇到一个坑,如下报错:

在这里插入图片描述这种问题,一定是yml文件配置的有问题,端口识别不出来,例如我这里,是因为文件的格式不符合yml文件写法,应该是缩进的写法。
在这里插入图片描述
在这里插入图片描述改成这样,再继续运行,就可以啦~~~
在这里插入图片描述也可能是这个文件中的其他地方不对,总之一定是这个文件中的。记得在这里找哦~~~

末尾比喻式总结:
Eureka Server就像一个盘子,而应用就像切好的水果,水果得放在盘子里,然后将盘子放在桌子上或者地上,水果才不会脏哦~ 你可以试试,没有盘子的水果单独放在地上,会脏没法吃的(服务运行不起来)

今天收获满满,继续加油丫!!!
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值