【spring cloud学习】4、创建服务提供者

注册中心Eureka Server创建并启动之后,接下来介绍如何创建一个Provider并且注册到Eureka Server中,再提供一个REST接口给其他服务调用。

首先一个Provider至少需要两个组件包依赖:Spring Boot Web服务组件和Eureka Client组件。如下所示:

<dependencies>
<!--Spring Boot Web服务组件 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency><!--Eureka Client组件 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>
</dependencies>

Spring Boot Web服务组件用于提供REST接口服务,Eureka Client组件用于服务注册与发现。从以上的Maven依赖可以看出,在Spring Cloud技术体系中,一个Provider首先是一个Spring Boot应用,所以在学习Spring Cloud微服务技术之前必须具备一些基本的Spring Boot开发知识。
然后在Spring Boot应用的启动类上加上**@EnableDiscoveryClient注解**,用于启用Eureka Client组件。

接下来,在Provider模块(或者项目)的src/main/resources的bootstrap启动属性文件(bootstrap.properties或bootstrap.yml)中增加Provider实例相关的配置,具体如下:

spring:application:name: uaa-providerserver:port: 7702servlet:context-path: /uaa-provider
eureka:instance:instance-id: ${spring.cloud.client.ip-address}:${server.port}ip-address: ${spring.cloud.client.ip-address}prefer-ip-address: true  #访问路径优先使用IP地址status-page-url-path: /${server.servlet.context-path}${management.endpoints.web.base-path}/info     health-check-url-path: /${server.servlet.context-path}${management.endpoints.web.base-path}/health 
client:register-with-eureka: true      #注册到Eureka服务器fetch-registry: true           #是否去注册中心获取其他服务serviceUrl:defaultZone: http://${EUREKA_ZONE_HOST:localhost}:7777/eureka/

配置完成后就可以启动provider实例,启动后,打开Eureka Server的控制台界面,可以看到uaa-provider的一个实例已经成功注册。
image.png

前面讲到,Spring Cloud中的一个Provider实例身兼两个角色:服务提供者和注册中心客户端。所以,在Provider的配置文件中包含两类配置:Provider实例角色的相关配置和Eureka Client角色的相关配置。

1.Provider实例角色的相关配置

在微服务集群中,Eureka Server自身是一种特殊的服务提供者,对外提供REST服务,所以可以配置一些Provider实例专属的配置项。

  • (1)eureka.instance.instance-id:此项用于配置Provider实例ID,如果不进行ID配置,默认值的格式如下:“主机名:服务名称:服务端口”
${spring.cloud.client.hostname}:${spring.application.name}:${server.port} 

大多数时候需要将IP显示在instance-id中,只要把主机名替换成IP即可,假设用“IP:端口”的格式来定义,可以使用下面的配置:

eureka.instance.instance-id= ${spring.cloud.client.ip-address}:${server.port} 

从“IP:端口”的格式一看就知道provider在哪台机器上,端口是多少。我们还可以单击Eureka Server控制台的服务instance-id进行跳转,去查看实例的详细信息。跳转链接的默认路径是主机名,如果在链接路径时需要使用IP,就要将配置项eureka.instance.preferIpAddress设置为true。

  • (2)eureka.instance.ip-address:设置当前实例的IP地址。${spring.cloud.client.ip-address}是从Spring Cloud依赖包中导入的配置项,存放了客户端的IP地址。
  • (3)eureka.instance.prefer-ip-address:如果配置为true,就使用IP地址的形式来定义Provider实例的地址,而不是使用主机名来定义Provider实例的地址。
  • (4)eureka.instance.status-page-url-path:定义Provider实例状态页面的URL,此选项配置的是相对路径,默认使用HTTP访问,如果需要使用HTTPS,就使用绝对路径配置。默认的相对路径为/info。
  • (5)eureka.instance.health-check-url-path:定义Provider实例健康检查页面的URL,此选项配置的是相对路径,默认使用HTTP访问,如果需要使用HTTPS,就使用绝对路径配置。默认的相对路径为/health。

2.Eureka Client组件的相关配置

  • (1)eureka.client.register-with-eureka:作为Eureka Client,eureka.client.register-with-eureka表示是否将自己注册到Eureka Server,这里设置为true,表示需要将Provider实例注册到Eureka Server。
  • (2)eureka.client.fetch-registry:作为Eureka Client,是否从Eureka Server获取注册信息,这里设置为true,表示需要从Eureka Server定期获取注册了的Provider实例清单。
  • (3)eureka.client.service-url.defaultZone:作为Eureka Client,需要向远程的Eureka Server自我注册,查询其他的提供者。此配置项用于设置此客户端默认Zone(类似于默认机房)的Eureka Server的交互地址
eureka.client.service-url.defaultZone= http://${EUREKA_ZONE_HOST:localhost}:
7777/eureka/

为了安全和方便,地址中并没有以硬编码方式设置Eureka Server的IP地址,而是使用了事先在操作系统中配置好的指向Eureka IP地址的环境变量EUREKA_ZONE_HOST,之所以这样配置,主要是为了后续在Eureka Server的IP地址发生变化时只需要修改环境变量的值,而不需要修改配置文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/714.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

功能测试的技术

目录 前言&#xff1a; 1) 基于最终用户/系统测试 2) 等价测试 3) 边界值测试 4) 基于决策的测试 5) 备用流量测试 6) 临时测试 前言&#xff1a; 功能测试是软件测试中最常见的一种测试类型&#xff0c;它旨在验证系统的功能是否符合设计要求和预期行为。在进行功能测…

HackTheBox - 学院【CPTS】复习1 - PASSWORD ATTACKS

前言 有一个月时间没发文章了&#xff0c;我在6月11号进入htb学院学习CPTS&#xff0c;在扎实的THM基础的加持下&#xff0c;我学的非常顺利&#xff0c;其实大部分内容都相当于复习&#xff0c;而学到的内容只是一些可能不太常见、又或者非常细节的小技巧&#xff0c;这也是非…

【Visual Studio】Qt 获取系统时间,并实时更新时间,使用 C++ 语言,配合 Qt 开发串口通信界面

知识不是单独的&#xff0c;一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏&#xff1a;Visual Studio。 这个需求来源于这个工程&#xff1a;【Visual Studio】Qt 的实时绘图曲线功能&#xff0c;使用 C 语言&#xff0c;配合 Qt 开发串口通信界面。 文章目录 Qt…

PHP 税务申报征收系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 税务申报征收系统 是一套完善的WEB设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 代码下载 https://download.csdn.net/download/qq_41221322/87959340https://downl…

【数据库】MySQL主从同步失败或重启后需要重新配置同步,主从同步延迟解决方案,mysql主从同步加速

最近在学习MySQL&#xff0c;主从同步方案。由于是新手&#xff0c;如有出现错误的地方&#xff0c;请大家谅解并留言指正。MySQL不同的版本配置稍有不同&#xff0c;最新版本8.0.27是默认开启binarylog的&#xff0c;见下图 查询MySQL信息 SELECT version,NOW() ;show variabl…

蓝桥杯专题-试题版-【01字符串】【2n皇后问题】【A+B问题】【Fibonacci数列】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

uni-app uni.switchTab和uni.reLaunch跳转tabbar页面

uni.switchTab&#xff1a; 跳转列表不会刷新 跳转到 tabBar 页面&#xff0c;并关闭其他所有非 tabBar 页面。 uni.reLaunch&#xff1a; 跳转列表会刷新 关闭所有页面&#xff0c;打开到应用内的某个页面。&#xff08;可以跳转到tabBar 页面&#xff09; 但如果是列表的自定…

CSS盒子模型

盒子模型 盒子模型盒子模型的介绍content内容区域的宽度和高度边框&#xff08; border &#xff09;内边距&#xff08; padding &#xff09;外边距&#xff08;margin&#xff09;盒子模型示例 盒子模型 目标&#xff1a;能够认识 盒子模型的组成 **&#xff0c;**能够掌握…

windows -- 自动安装python包,并启动服务

文章目录 定制python的包编写批处理文件遇到的问题 自动安装python的包&#xff0c;并启动后台服务进程。 定制python的包 基于python的Flask框架&#xff0c;简单开发一个服务器&#xff1b;编写发布python包的setup.py 在my_ff包的同级目录下创建一个setup.py&#xff0c…

linux -信号量semphore分析

linux -信号量分析 1 struct semaphore和sema_init1.1 struct semaphore1.2 sema_init 2 down3 up4 down_interruptible5 down_killable6 down_timeout7 down_trylock 基于linux-5.15分析&#xff0c;信号量在使用是是基于spin lock封装实现的。 1 struct semaphore和sema_ini…

壳牌小程序笔记

壳牌加油站 uni-app-基础-day01 概览 为什么要学uni-app&#xff1f; 现在很多中小型公司&#xff0c;都有自己的小程序项目&#xff0c;然后开发小程序就会用到uni-app。 uni-app没有诞生之前&#xff0c;怎么写小程序 使用原生微信小程序这个框架去开发&#xff1f; 只…

leetcode887. 鸡蛋掉落(动态规划-java)

鸡蛋掉落 leetcode887. 鸡蛋掉落题目描述暴力递归 二分查找代码演示 动态规划代码演示 动态规划专题 leetcode887. 鸡蛋掉落 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/super-egg-drop 题目描述 给你 k 枚相同的鸡…