SpringCloud学习笔记(1):Eureka注册中心
程序员文章站
2022-06-23 23:41:50
简介 Eureka是Netflix开源的基于rest的服务治理方案,分为Server端和Client端,Server端为注册中心,其他微服务通过Client端连接Server端进行服务的注册和发现。 项目介绍 1. sc parent,父模块 2. sc provider,提供者模块 3. sc e ......
简介
eureka是netflix开源的基于rest的服务治理方案,分为server端和client端,server端为注册中心,其他微服务通过client端连接server端进行服务的注册和发现。
项目介绍
- sc-parent,父模块
- sc-provider,提供者模块
- sc-eureka,注册中心
- sc-consumer-discovery,消费者模块
搭建父模块
创建父模块sc-parent,pom.xml:
<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.cf</groupid> <artifactid>sc-parent</artifactid> <version>0.0.1-snapshot</version> <packaging>pom</packaging> <!-- 继承spring boot的默认值 --> <parent> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-parent</artifactid> <version>2.1.6.release</version> <relativepath /> <!-- lookup parent from repository --> </parent> <properties> <!-- 降低maven-jar-plugin插件版本,防止版本不匹配导致的pom.xml第一行报错 --> <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version> </properties> <dependencies> <!-- 添加web应用依赖 --> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> </dependency> </dependencies> <dependencymanagement> <dependencies> <!-- springcloud依赖 --> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-dependencies</artifactid> <version>greenwich.sr2</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencymanagement> <build> <plugins> <!-- 打可执行jar包插件 --> <plugin> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-maven-plugin</artifactid> </plugin> <!-- 指定编译插件使用的jdk版本 --> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-compiler-plugin</artifactid> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>
搭建注册中心
1.在父模块下创建子模块项目sc-eureka,pom.xml:
<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> <parent> <groupid>com.cf</groupid> <artifactid>sc-parent</artifactid> <version>0.0.1-snapshot</version> </parent> <artifactid>sc-eureka</artifactid> <dependencies> <!-- eureka服务端依赖 --> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-netflix-eureka-server</artifactid> </dependency> </dependencies> </project>
2.创建启动类eureka.eurekaapplication:
package eureka; import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.springbootapplication; import org.springframework.cloud.netflix.eureka.server.enableeurekaserver; //声明该类为springboot服务的入口 @springbootapplication //声明该微服务为注册中心,提供服务发现和注册的功能 @enableeurekaserver public class eurekaapplication { public static void main(string[] args) { springapplication.run(eurekaapplication.class, args); } }
3.创建配置文件/src/main/resources/application.yml:
server: port: 8080 #当前服务端口 eureka: instance: hostname: localhost #当前eureka实例主机名 client: registerwitheureka: false #表示不向注册中心注册自己 fetchregistry: false #表示此客户端不需要从eureka注册中心获取eureka注册表信息 serviceurl: defaultzone: http://localhost:8080/eureka/ ##eureka对外提供的地址(客户端连接的地址)
其他配置信息可以参考eurekainstanceconfigbean和eurekaclientconfigbean两个配置类
4.运行启动类eurekaapplication,在浏览器中访问http://localhost:8080/,出现如下图表示注册中心搭建成功:
提供者与服务注册
1.在父模块下创建子模块项目sc-provider,pom.xml:
<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> <parent> <groupid>com.cf</groupid> <artifactid>sc-parent</artifactid> <version>0.0.1-snapshot</version> </parent> <artifactid>sc-provider</artifactid> <dependencies> <!-- eureka客户端依赖,用于连接服务端进行服务注册和发现 --> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-netflix-eureka-client</artifactid> </dependency> </dependencies> </project>
2.创建启动类provider.providerapplication:
package provider; import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.springbootapplication; @springbootapplication public class providerapplication { public static void main(string[] args) { springapplication.run(providerapplication.class, args); } }
3.创建controller:provider.controller.bookcontroller
package provider.controller; import org.springframework.web.bind.annotation.getmapping; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.restcontroller; @requestmapping("/book") @restcontroller public class bookcontroller { @getmapping("/list") public string getbooklist(){ //模拟从service返回数据 return "[\"java入门到放弃\",\"c++入门到放弃\",\"python入门到放弃\",\"c入门到放弃\"]"; } }
4.创建配置文件/src/main/resources/application.yml:
server: port: 8081 spring: application: name: sc-provider #注册到eureka注册中心上的服务名称,对应eureka界面上的application列 eureka: client: serviceurl: defaultzone: http://localhost:8080/eureka/ #注册中心的访问地址 instance: preferipaddress: true #表示将自己的ip注册到eureka注册中心。默认为false,表示将hostname注册到注册中心
5.依次启动注册中心sc-eureka和提供者sc-provider,当提供者启动时,会将自己的信息注册到eureka注册中心,在浏览器中访问http://localhost:8080/,提供者sc-provider已经在注册中心注册。
消费者和服务发现
1.在父模块下创建子模块项目sc-consumer-discovery,pom.xml:
<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> <parent> <groupid>com.cf</groupid> <artifactid>sc-parent</artifactid> <version>0.0.1-snapshot</version> </parent> <artifactid>sc-consumer-discovery</artifactid> <dependencies> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-netflix-eureka-client</artifactid> </dependency> </dependencies> </project>
2.创建启动类consumer.consumerdiscoveryapplication:
package consumer; import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.springbootapplication; import org.springframework.context.annotation.bean; import org.springframework.web.client.resttemplate; @springbootapplication public class consumerdiscoveryapplication { public static void main(string[] args) { springapplication.run(consumerdiscoveryapplication.class, args); } @bean public resttemplate resttemplate(){ return new resttemplate(); } }
3.创建调用提供者服务的controller:consumer.controller.consumerdiscoverycontroller
package consumer.controller; import java.util.list; import org.springframework.beans.factory.annotation.autowired; import org.springframework.cloud.client.serviceinstance; import org.springframework.cloud.client.discovery.discoveryclient; import org.springframework.web.bind.annotation.getmapping; import org.springframework.web.bind.annotation.restcontroller; import org.springframework.web.client.resttemplate; @restcontroller public class consumerdiscoverycontroller { @autowired private discoveryclient discoveryclient; @autowired private resttemplate resttemplate; @getmapping("/getbooklist") public string getbooklist(){ //通过服务名获取实例信息 list<serviceinstance> list = discoveryclient.getinstances("sc-provider"); if (list != null && list.size() > 0 ) { //调用服务,并返回服务结果 return resttemplate.getforobject(list.get(0).geturi() + "/book/list", string.class); } return null; } }
4.创建application.yml:
server: port: 8082 spring: application: name: sc-consumer-discovery eureka: client: registerwitheureka: false #在本实例中消费者不提供服务,所以无需到注册中心注册。在实际应用中,消费者也可能是提供者。 serviceurl: defaultzone: http://localhost:8080/eureka/
5.依次启动注册中心sc-eureka、提供者sc-provider、消费者sc-consumer-discovery,当消费者启动时,会从注册中心查询可用的服务列表及其网络地址。直接访问提供者和消费者调用提供者结果如下:
总结
在传统的应用程序中,都是把提供者的网络地址硬编码在代码中,导致提供者和消费者耦合度高,当提供者网络地址发生了变化,则需要修改消费者配置并重新发布。eureka起到了解耦的作用,提供者到eureka注册中心中注册,消费者从eureka注册中心中获取提供者的网络地址并进行调用,当提供者网络地址变更时会重新到注册中心注册。
上一篇: 微信头像地址失效踩坑记附带方案
下一篇: 深入理解负载均衡经典案例
推荐阅读
-
springcloud实现注册中心Eureka
-
SpringCloud微服务实战:一、Eureka注册中心服务端
-
SpringCloud:1章 Eureka服务注册与发现
-
SpringCloud-服务注册与实现-Eureka创建服务注册中心(附源码下载)
-
SpringCloud学习笔记(7):使用Spring Cloud Config配置中心
-
转:SpringCloud服务注册中心比较:Consul vs Zookeeper vs Etcd vs Eureka
-
springcloud(二):spring cloud eureka 注册中心server 启动
-
SpringCloud-2.X 学习笔记02 Eureka Client 搭建
-
springCloud学习笔记一 注册中心搭建
-
SpringCloud入门学习笔记2--eureka