使用 Spring Cloud 实现微服务系统

准备工作:
为了方便创建项目,以及各版本以来关系,此次创建项目使用 Spring Assistant插件。

创建单体服务中心项目

启用服务端的服务注册,发现功能

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerDemoApplication {public static void main(String[] args) {SpringApplication.run(EurekaServerDemoApplication.class, args);}}

配置“服务中心”地址,端口号,应用名称

# 端口
server.port=8080
# 服务名
spring.application.name=Eureka Server Demo
# 是否注册到 Eureka Server,默认为true
eureka.client.register-with-eureka=true
# 是否从 Eureka Server 获取注册信息,默认为true
eureka.client.fetch-registry=true
# 设置与 Eureka Server 进行交互的地址,查询服务和注册服务都需要使用他。多个地址使用 "," 分割。
eureka.client.service-url.default-zone=http://localhost:8080/eureka/

gitee:https://gitee.com/Jacob-gitee/eureka/tree/master/eureka1/

实现服务集群

配置虚拟地址

# 节点1
127.0.0.1       node1
# 节点2
127.0.0.1       node2
# 节点3
127.0.0.1       node3

多环境配置

创建节点 node1 配置文件 application-node1.pproperties,并指向 node2 和 node3。

# 端口
server.port=8081
# 服务名
spring.application.name=Eureka Server Demo
# 节点名
eureka.instance.hostname=node1
# 是否注册到 Eureka Server,默认为true
eureka.client.register-with-eureka=true
# 是否从 Eureka Server 获取注册信息,默认为true
eureka.client.fetch-registry=true
# 设置与 Eureka Server 进行交互的地址,查询服务和注册服务都需要使用他。多个地址使用 "," 分割。
eureka.client.service-url.defaultZone=http://node2:8082/eureka/,http://node3:8083/eureka/

创建节点 node2 配置文件 application-node2.pproperties,并指向 node1 和 node3。

# 端口
server.port=8082
# 服务名
spring.application.name=Eureka Server Demo
# 节点名
eureka.instance.hostname=node2
# 是否注册到 Eureka Server,默认为true
eureka.client.register-with-eureka=true
# 是否从 Eureka Server 获取注册信息,默认为true
eureka.client.fetch-registry=true
# 设置与 Eureka Server 进行交互的地址,查询服务和注册服务都需要使用他。多个地址使用 "," 分割。
eureka.client.service-url.defaultZone=http://node1:8081/eureka/,http://node3:8083/eureka/

创建节点 node3 配置文件 application-node3.pproperties,并指向 node1 和 node2。

# 端口
server.port=8083
# 服务名
spring.application.name=Eureka Server Demo
# 节点名
eureka.instance.hostname=node3
# 是否注册到 Eureka Server,默认为true
eureka.client.register-with-eureka=true
# 是否从 Eureka Server 获取注册信息,默认为true
eureka.client.fetch-registry=true
# 设置与 Eureka Server 进行交互的地址,查询服务和注册服务都需要使用他。多个地址使用 "," 分割。
eureka.client.service-url.defaultZone=http://node1:8081/eureka/,http://node2:8082/eureka/

打包和部署

打包

使用 Maven 命令 进行打包

部署 服务中心 集群

在 3个DOS命令窗口分别暑促一下命令启动服务中心:

# node1
java -jar eureka-0.0.1.jar --spring.profiles.active=node1
# node2
java -jar eureka-0.0.1.jar --spring.profiles.active=node2
# node3
java -jar eureka-0.0.1.jar --spring.profiles.active=node3

gitee:https://gitee.com/Jacob-gitee/eureka/tree/master/eureka

实现单体"服务提供者"客户端

使用插件创建 客户端,最后使用选择 Eureka Discovery Client

添加依赖

<!-- 不加此依赖会:registration status: 204 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

添加配置

# 服务名
spring.application.name=provider
# 应用的端口号
server.port=8000
provider.name=provider0
# "服务中心" 地址
eureka.client.service-url.defaultZone=http://node1:8081/eureka/

启用客户端的服务注册,发现功能:

@EnableDiscoveryClient
@SpringBootApplication
public class EurekaServerClientApplication {public static void main(String[] args) {SpringApplication.run(EurekaServerClientApplication.class, args);}}

使用 Eureka 启用客户端服务的注册和发现功能,可以使用注解 @EnableEurekaClient 和 @EnableDiscoveryClient 来实现。如果使用其他"服务中心"(zookeeper,Consul),则使用 @EnableDiscoveryClient 来实现。@EnableEurekaClient 是 Eureka 的专用注解。

实现"服务提供者"接口

@RestController
public class HellController {@Value("${server.port}")private String port;@Value("${provider.name}")private String name;@GetMapping("hello")public String hello(){return "provider:"+ name+" port:"+port;}
}

实现"服务提供者"集群

多环境配置

创建配置文件 application-provider1.properties,并做如下配置:

# 服务名
spring.application.name=provider
# 应用的端口号
server.port=8001
# 自定义配置项
provider.name=provider1
# "服务中心" 地址
eureka.client.service-url.defaultZone=http://node1:8081/eureka/,http://node2:8082/eureka/,http://node3:8083/eureka/

创建配置文件 application-provider2.properties,并做如下配置:

# 服务名
spring.application.name=provider
# 应用的端口号
server.port=8002
# 自定义配置项
provider.name=provider2
# "服务中心" 地址
eureka.client.service-url.defaultZone=http://node1:8081/eureka/,http://node2:8082/eureka/,http://node3:8083/eureka/

打包启动

# 打包
mvn clean package
# 启动
java -jar eureka-clien.0.0.1.jar --spring.profiles.active=provider1
java -jar eureka-clien.0.0.1.jar --spring.profiles.active=provider2

用 Feign 实现"服务消费者"

创建 Eureka 的客户端

创建过程 参照:实现单体"服务提供者"客户端

添加依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>

添加配置

# 服务名
spring.application.name=consumer
# 应用的端口号
server.port=9000
# 不注册到"服务中心"
eureka.client.register-with-eureka=false
# "服务中心" 地址
eureka.client.service-url.defaultZone=http://node1:8081/eureka/,http://node2:8082/eureka/,http://node3:8083/eureka/

启用客户端的发现和远程调用

// 启动 feign 远程调用服务
@EnableFeignClients
// 启用客户端的服务注册,发现功能
@EnableDiscoveryClient
@SpringBootApplication
public class ConsumerApplication {public static void main(String[] args) {SpringApplication.run(ConsumerApplication.class, args);}}

调用"服务提供者"接口

// 远程服务名
@FeignClient(name = "provider")
public interface MyFeignClient {// 此接口需要和远程调用接口方法名,参数保持一致@GetMapping("/hello")public String hello();}

实现"客户端"接口

@RestController
public class FeignController {@Autowiredprivate MyFeignClient myFeignClient;@GetMapping("hello")public String hello(){return myFeignClient.hello();}}

测试微服务系统

使用 Spring Cloud 实现微服务系统相关推荐

  1. Spring Boot + Spring Cloud 构建微服务系统(三):服务消费和负载(Feign)

    Spring Cloud Feign Spring Cloud Feign是一套基于Netflix Feign实现的声明式服务调用客户端.它使得编写Web服务客户端变得更加简单.我们只需要通过创建接口 ...

  2. 《深入理解 Spring Cloud 与微服务构建》第十八章 使用 Spring Security OAuth2 和 JWT 保护微服务系统

    <深入理解 Spring Cloud 与微服务构建>第十八章 使用 Spring Security OAuth2 和 JWT 保护微服务系统 文章目录 <深入理解 Spring Cl ...

  3. 《深入理解 Spring Cloud 与微服务构建》第十七章 使用 Spring Cloud OAuth2 保护微服务系统

    <深入理解 Spring Cloud 与微服务构建>第十七章 使用 Spring Cloud OAuth2 保护微服务系统 文章目录 <深入理解 Spring Cloud 与微服务构 ...

  4. 《深入理解Spring Cloud与微服务构建》出版啦!

    作者简介 方志朋,毕业于武汉理工大学,CSDN博客专家,专注于微服务.大数据等领域,乐于分享,爱好开源,活跃于各大开源社区.著有<史上最简单的Spring Cloud教程>,累计访问量超过 ...

  5. Spring Cloud构建微服务架构:分布式服务跟踪(整合zipkin)【Dalston版】

    通过上一篇<分布式服务跟踪(整合logstash)>,我们虽然已经能够利用ELK平台提供的收集.存储.搜索等强大功能,对跟踪信息的管理和使用已经变得非常便利.但是,在ELK平台中的数据分析 ...

  6. Spring Cloud构建微服务架构:分布式服务跟踪(整合logstash)【Dalston版】

    通过之前的<入门示例>,我们已经为两个由SpringCloud构建的微服务项目 trace-1和 trace-2引入了Spring Cloud Sleuth的基础模块 spring-clo ...

  7. 基于Spring Boot和Spring Cloud实现微服务架构学习--转

    原文地址:http://blog.csdn.net/enweitech/article/details/52582918 看了几周spring相关框架的书籍和官方demo,是时候开始总结下这中间的学习 ...

  8. 基于 Spring Boot 和 Spring Cloud 实现微服务架构

    前言 首先,最想说的是,当你要学习一套最新的技术时,官网的英文文档是学习的最佳渠道.因为网上流传的多数资料是官网翻译而来,很多描述的重点也都偏向于作者自身碰到的问题,这样就很容易让你理解和操作出现偏差 ...

  9. Spring Cloud构建微服务架构:服务注册与发现(Eureka、Consul)【Dalston版】

    Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中涉及的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全 ...

最新文章

  1. 【One by One系列】IdentityServer4(三)使用用户名和密码
  2. Android WebView 图片超出宽度自适应,点击查看大图
  3. python二级考试真题_全国BIM技能等级考试真题全套(一/二级,全专业,28套)
  4. 职场中神奇的程序员,却常常被人说“太直”,这是什么样的思维?
  5. python 条件判断和循环
  6. FPGA笔试数电部分(一)
  7. CAD图纸怎么加密?CAD图纸加密真的安全?
  8. MySQL相关知识整理
  9. 第二期:关于大数据相关的问答汇总,关注持续更新中哦~
  10. C# Word 文档保护
  11. linux删除不了777文件,Linux使用着需要理解chmod -r 777文件权限
  12. 本地数据库迁移至服务器数据库的教程
  13. 五款最优秀的java微服务框架
  14. 《数字逻辑设计与计算机组成》一 第3章 3.1 简介
  15. 垃圾分类的正确姿势?用 OpenCV 人工智能图像识别技术来进行
  16. 4.再模仿一个算术题
  17. 通过各种实践活动 培养学生道德品质
  18. 计算机一级wps表格函数,WPS表格函数学习之公式大全(字母顺序).pdf
  19. 【Android】Android 集成商米内置打印机打印票据
  20. 数理逻辑4 -- 公理化集合论16

热门文章

  1. postman调用webservice接口_接口对前后端和测试的意义
  2. AD20学习笔记5---PCB设计规则设置及PCB手工布线
  3. 第5章 Python 数字图像处理(DIP) - 图像复原与重建2 - 瑞利噪声
  4. deepin安装卡死在蓝色背景_求大神帮助~安装DEEPIN系统卡在蓝色背景图什么原因...
  5. 解题报告:51nod 加农炮
  6. js学习总结----案例之多级菜单js版本
  7. Java 1.8 HashMap源码探究
  8. 使用最大似然法来求解线性模型(1)
  9. duilib进阶教程 -- 改进窗口拖动 (12)
  10. android p wifi一直在扫描_在Android上的每次WiFi扫描之间我应该使用什么时间间隔?...