栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

孙卫琴的《精通Spring》的学习笔记:在SpringCloud中创建并注册微服务

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

孙卫琴的《精通Spring》的学习笔记:在SpringCloud中创建并注册微服务

本文选自孙卫琴的《精通Spring:Java Web开发技术详解》清华大学出版社出版

技术支持网址为:​​ ​ ​  www.javathinker.net/spring.jsp​​

​本书对应的直播和录播课:​​ ​ ​   www.javathinker.net/zhibo.jsp​​

孙卫琴的QQ学习答疑群:915851077

本文将创建一个包含微服务的servicemodule模块,并且把当前模块注册到Eureka服务器中。

如图1所示,servicemodule模块包含以下内容:

  1.   Tomcat服务器:监听8088端口,是运行ServiceController类的Web容器。
  2.   ServiceController类:采用RESTFul风格的控制器类,它的getWeather()方法提供天气预报的微服务。
  3.   EurekaClient插件:负责和Eureka服务器通信,把当前模块注册到Eureka服务器中。并且会每隔一段时间就自动从Eureka服务器获取最新的微服务模块注册列表,把它保存在自身的缓存中。
  4.   ServicemoduleApplication启动类:启动Tomcat服务器,并且启用EurekaClient插件。

 

          图1  servicemodule模块的结构

在Filter窗口中选择“Web”-->“Spring Web”功能,以及“Spring Cloud Discovery”-->“Eureka Discovery Client”功能,参见图2和图3。Spring Assistant会依据这个选择为应用程序提供所依赖的类库,使得当前模块会支持Spring MVC框架,并且会包含EurekaClient插件。

Spring Assistant会依据这个选择为应用程序提供所依赖的类库,使得当前模块会支持SpringMVC 框架,并且会包含EurekaClient插件。

图2  选择“Web”--> “Spring Web”功能

图3  选择“Spring Cloud Discovery”-->“Eureka Discovery Client”功能

1.  创建ServicemoduleApplication启动类

servicemodule模块创建好以后,SpringBoot工具会自动创建一个ServicemoduleApplication启动类,在这个类中增加@EnableEurekaClient注解,参见例程1。@EnableEurekaClient注解的作用是启用EurekaClient插件。本模块会通过EurekaClient插件向Eureka服务器注册自身。

例程1  ServicemoduleApplication.java

@SpringBootApplication
@EnableEurekaClient
public class ServicemoduleApplication {
  publicstatic void main(String[] args) {

   SpringApplication.run(ServicemoduleApplication.class, args);

  }
}

2.  创建微服务入口ServiceController控制器类

ServiceController类是一个普通的采用RESTFul风格的控制器类,它的getWeather()方法能提供天气预报的微服务,参见例程2。

例程2  ServiceController.java

@RestController
public class ServiceController {
 
 @RequestMapping("weather/{date}")

  publicString getWeather(@PathVariable("date")String date){

    returndate+"
日的天气:"+"
晴转多云,阵风3级";
  }
}

以上普通的ServiceController控制器类置身于Spring Cloud庞大的框架中,就变成了微服务的入口。之所以称它是微服务入口,而不是微服务的实现类,这是因为在实际的应用程序中,控制器类往往是通过调用模型层的方法来提供具体的业务逻辑服务。本范例只不过是做了简化,直接由ServiceController控制器类的getWeather()方法来提供微服务。

到此为止,神秘抽象的微服务又进一步被揭开了面纱,原来它的入口不过是大家熟悉的Spring MVC框架中的控制器类。

3.  配置servicemodule模块

在C:cloudappservicemodulesrcmainresources目录中创建Spring的配置文件application.yml。以下例程3是application.yml的源代码。

例程3  application.yml

server:
  port: 8088
eureka:
  client:
   serviceUrl:

     defaultZone: http://localhost:8001/eureka/

 
  instance:
    #间隔多长时间发送心跳给Eureka服务器,表明当前模块仍然活着,默认30秒
   lease-renewal-interval-in-seconds: 5

 
    #Eureka服务器在接收到当前模块最后一次发出的心跳后,
    #需要过多久才能认定当前模块已经无效
   lease-expiration-duration-in-seconds: 10

spring:
 application:

    name:WEATHER-SERVICE

以上配置文件指定当前模块的Tomcat服务器监听8088端口。EurekaClient插件所访问的Eureka服务器的地址为“http://localhost:8001/eureka/”。 EurekaClient插件向Eureka服务器注册当前模块时,把注册名字设为“WEATHER-SERVICE”。

EurekaClient插件向Eureka服务器注册了当前模块后,万一当前模块在运行中异常终止了,Eureka服务器如何能监测到这一情况呢?解决办法是由EurekaClient插件定时向Eureka服务器发送一个表明当前模块还活着的信息,可以把这个信息形象地称为“心跳”。以上配置文件中的lease-renewal-interval-in-seconds属性就用来设定发送心跳的间隔时间,以秒为单位。

假如EurekaClient插件间隔5秒发送一次心跳,后来当前模块终止运行了,Eureka服务器再也没接收到当前模块的心跳。从最后一次接收到当前模块的心跳的时刻开始,超过了lease-expiration-duration-in-seconds属性所设置的时间(以秒为单位)后,Eureka服务器就可以认定当前模块已经无效。

4.  运行servicemodule模块

先运行eurekamodule模块,然后在IDEA中运行ServicemoduleApplication启动类,就会运行servicemodule模块。ServicemoduleApplication启动类会启动监听8088端口的Tomcat服务器,并且还会启用EurekaClient插件,它把当前模块注册到Eureka服务器中。

通过浏览器访问:

http://localhost:8001

就会返回Eureka服务器的主页,参见图4,此时会看到在Eureka服务器中已经注册了一个名为“WEATHER-SERVICE”的应用实例,实际上就是指servicemodule模块。

           图4  Eureka服务器的主页

通过浏览器访问:

http://localhost:8088/weather/2020-10-02

就会按照普通的访问RESTFul风格的控制器类的方式,来访问ServiceController类的getWeather()方法,在网页上会展示getWeather()方法的返回结果,参见图5。

       图5  访问ServiceController类的getWeather()方法

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/301877.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号