Spring Cloud初学手记(一)服务注册

编程入门 行业动态 更新时间:2024-10-13 18:21:07

Spring Cloud初学<a href=https://www.elefans.com/category/jswz/34/1766042.html style=手记(一)服务注册"/>

Spring Cloud初学手记(一)服务注册

Spring Cloud是基于Spring Boot的,适合用于管理Spring Boot创建的各个微服务应用

一、既然要弄Spring Cloud,那咱就得先弄个服务注册中心

  1. 创建一个Spring Boot工程作为Eureka服务注册中心,POM文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns=".0.0" xmlns:xsi=""xsi:schemaLocation=".0.0 .0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.3.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.personal.test</groupId><artifactId>Satsuki</artifactId><version>0.0.1-SNAPSHOT</version><name>Satsuki</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.0.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka-server</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Dalston.RC1</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>;/url><snapshots><enabled>false</enabled></snapshots></repository></repositories></project>
  1. 在Spring Boot的主入口类上加入@EnableEurekaServer注解,表示该工程是作为服务注册中心运行的
@SpringBootApplication
@EnableEurekaServer
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class EurekaServerApplication {public static void main(String[] args) {SpringApplication.run(EurekaServerApplication.class, args);}
}

PS:
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})的作用为启动时不连接数据库;
② 如果@EnableEurekaServer注解无法引入,可能是Spring Boot的版本和Spring Cloud对应的支持版本不一致,修改为对应的Spring Cloud支持版本即可。(我的Spring Boot版本为1.5.3.RELEASE,对应的Spring Cloud支持版本为Dalston.RC1)

  • 对照关系表如下
    |------Spring Boot------|------Spring Cloud------|
    |-----------1.2.x----------|------------Angel---------|
    |-----------1.3.x----------|-----------Brixton--------|
    |-----------1.4.x----------|----------Camden--------|
    |-----------1.5.x----------|-----------Dalston--------|
    |-----------1.5.x----------|----------Edgware--------|
    |-----------2.0.x----------|-----------Finchley-------|
  1. 需要在application.yml配置文件中写入一些配置信息
#指定Eureka的端口
server:port: 8761eureka:instance:hostname: localhostclient:# 实例是否在eureka服务器上注册自己的信息以供其他服务发现,默认为trueregisterWithEureka: false# 此客户端是否获取eureka服务器注册表上的注册信息,默认为truefetchRegistry: falseserviceUrl:defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
  1. 启动并访问该工程 http://localhost:8761,可看到服务注册中心的管理页面(红框处表示暂时还没有服务注册上去)

二、服务注册中心有了,现在来注册一个服务上去

  1. 按照上面的步骤,再创建一个Spring Boot工程,用来注册服务,POM文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns=".0.0" xmlns:xsi=""xsi:schemaLocation=".0.0 .0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.3.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.personal.test</groupId><artifactId>Satsuki_Clients01</artifactId><version>0.0.1-SNAPSHOT</version><name>Satsuki_Clients01</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.0.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Dalston.RC1</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>;/url><snapshots><enabled>false</enabled></snapshots></repository></repositories></project>
  1. 同样需要在application.yml中加入一些配置
#注册中心的地址
eureka:client:serviceUrl:defaultZone: http://localhost:8761/eureka/
server:#指定服务端口port: 8762
spring:application:#注册至Eureka的服务名称name: service-helloworld
  1. 在该工程的主入口类上加上@EnableDiscoveryClient注解,表示这是一个服务应用,运行后会发布至服务注册中心(顺便我在这里写了一个请求)
@RestController
@EnableDiscoveryClient
@SpringBootApplication
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class SatsukiClients01Application {public static void main(String[] args) {SpringApplication.run(SatsukiClients01Application.class, args);}@Value("${server.port}")String port;@RequestMapping(value = "/hello")public String hello() {return "hello world, port : " + port;}
}
  1. 启动服务后,对应的服务已经注册上去啦~
  2. 访问http://localhost:8762/hello可查看发布的服务

三、(非必要)前面搭建的工程中的配置信息均是以硬编码的形式写入配置文件中,如果多台服务器集群,每台服务器都需要写入同样的配置,更改及同步配置信息会比较麻烦。Spring Cloud推荐使用版本管理服务器(缺省使用git)去统一维护配置文件,搭建一个Config Server工程,其他Web服务器只需要去Config Server上获取配置文件信息即可

  1. 新建一个Spring Boot工程作为Config Server,添加如下依赖:
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId>
</dependency>
  1. 在工程的主入口类上加上@EnableConfigServer注解,表示该工程为一个Config Server,同时加上@EnableDiscoveryClient注解,发布该服务至Eureka
@EnableDiscoveryClient
@EnableConfigServer
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
@SpringBootApplication
public class ConfigServerApplication {public static void main(String[] args) {SpringApplication.run(ConfigServerApplication.class, args);}
}
  1. 配置Config Server的application.yml
eureka:client:serviceUrl:defaultZone: http://localhost:8761/eureka/
server:port: 8888spring:cloud:config:server:git:#git服务器的仓库地址uri: https://xxxx#配置文件所存放的仓库地址下的路径(不需要指定文件名)searchPaths: abcFloder/xyzFloder/xxxConfigapplication:name: config-server
  1. 新建一个Client工程,加上依赖:
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId>
</dependency>
  1. 在新建的Client工程中的bootstrap.yml中写入如下信息:
server:port: 8881
spring:application:name: config-clientcloud:config:label: masterprofile: dev#Config Server的uriuri: http://localhost:8888/

PS:
① Client应用需要在加载属性之前读取Config Server上的配置文件信息,bootstrap.yml加载的优先级高于application.yml;
② 按照Spring Cloud约定的方式,{application}-{profile}.properties{application}-{profile}.yml格式为读取的配置文件名,所以上面会读取到 git 仓库中master分支下abcFloder/xyzFloder/xxxConfig路径下的config-client-dev.ymlconfig-client-dev.properties的配置信息;

  1. 启动新建的Client工程并进行访问,可以输出从Config Server拿到的配置信息。
  2. 没有啦。。。

!!!顺便提一句,yml中的格式注意事项(踩过的坑。。)

  1. 不能存在tab键的缩进,以上yml文件的格式化均为space键敲出,存在tab键的缩进会报错;
  2. 所有的冒号:后面必须要有至少一个space空格,否则也会报错;

更多推荐

Spring Cloud初学手记(一)服务注册

本文发布于:2024-03-05 19:44:33,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1713233.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:手记   Spring   Cloud

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!