0、项目搭建

创建maven项目,删除其中的src目录,作为整体父项目,在其中添加module实现各个组件。

1、Eureka Server的实现

添加module,创建Spring Boot项目,添加Eureka Discovery ClientEureka Server依赖,作为Eureka Server。

启动类添加@EnableEurekaServer注释。

修改配置文件application.yml,如下:

 server:
port: 1001 eureka:
client:
//是否将自己注册到eureka server上,默认为true
//由于本节点为eureka server,设为false
registerWithEureka: false
//是否从eureka server获取注册信息,默认为true
//由于为单点的eureka server,不需要同步信息,设为false
fetchRegistry: false
//设置与eureka server交互的地址,查询和注册服务都经过这个地址
serviceUrl:
defaultZone: http://localhost:${server.port}/eureka/

启动项目,即可访问http://localhost:1001/查看eurekaServer管理中心。

2、Service节点

添加module,创建Spring Boot项目,添加Eureka Discovery ClientEureka Server依赖。

启动类添加@EnableEurekaClient注释(也可用@EnableDiscoveryClient取代,效果相同,前者对应Eureka,后者适用多种注册中心)以及@ComponentScan注释。

修改配置文件application.yml,如下:

 spring:
//服务名称
application:
name: Service1
server:
port: 8001 //在服务中心进行注册
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8801/eureka/

配置完成后启动项目,可在eureka管理中心看到注册的服务。

项目中新建service和controller包,controller包中HelloController负责接受请求,并路由到service包中的具体实现,controller中仅注入service对象,然后根据请求路径调用响应的service实现,service中负责具体的实现。

同理,按上面步骤增加第二个Service节点,注册名为Service2,注册在8002端口。

3、服务调用

Sping  Cloud由两种消费方式,rest+ribbon和feign两种。

3.1、rest+ribbon调用(通过RestTemplate构造URL调用)

添加module,创建Spring Boot项目,添加Eureka Discovery ClientEureka ServerRibbon依赖。

启动类添加@EnableDiscoveryClient和@ComponentScan注释。

修改配置文件application.yml,注册在8003端口上的Service3服务。

service包和controller包同上。

Service3调用Service1和Service2:

启动类中注入RestTemplate对象,添加@LoadBalance、@Bean和@Autowired注释,开启负载均衡。

改造service包中的具体实现:

自动注入(@Autowired)RestTemplate对象,restTemplate.getForObject("http://${注册应用名}/${请求路径}?参数列表",String.class)

实现远程调用,通过注册应用名自动负载均衡。

3.2、feign调用(通过动态代理的接口来实现接口调用,在接口中实现远程调用)

添加module,创建Spring Boot项目,添加Eureka Discovery ClientEureka ServerFeign依赖。

启动类添加@EnableDiscoveryClient和@ComponentScan注释。

修改配置文件application.yml,注册在8004端口上的Service4服务。

service包和controller包同上。

Service4调用Service1和Service2:

新增feignRPC包,其中定义两个接口,分别对应两个应用Service1和Service2的调用。

service1_feign接口为:

 @FeignClients(value = "Service1")    //通过应用注册名来调用服务
public interface service1_feign() {
@RequestMapping(value = "/${请求路径}", method = RequestMethod.GET)
public String getHello(@RequestParam("service1中参数名") 具体参数);
}

改造service包中的具体实现:

自动注入(@Autowired)service1_feign接口,像调用本地方法那样调用接口的方法即可实现远程调用

Feign集成了Ribbon,通过注册应用名自动负载均衡。

4、体验负载均衡机制

创建module,普通的service节点,注册在8005端口,应用名为Service1。

在eureka server管理界面可以看到Service1有两个服务提供者提供同名应用。

通过Service3或者Service4调用应用名为Service1的服务。

由于Ribbon默认的负载均衡策略为轮询,通过刷新界面,可以看到一次调用module1和module5提供的服务。

5、网关Zuul的搭建

5.1、体验网关的请求转发功能

创建module,添加Eureka Discovery Client、Eureka Server和Zuul依赖。

启动类添加@EnableZuulProxy注释。

修改配置文件application.yml,注册在6001端口上,注册应用名为zuul。

启动项目后,可以通过网关访问服务:

直接http://localhost:8001/hello?name=world可以访问Service1;

通过网关转发,http://localhost:6001/Service1/hello?name=world访问Service1应用,Zuul默认实现了按应用名负载均衡。

5.2、网关的自定义路由

在application.yml配置文件中配置:

 zuul:
//前缀,请求路径前必须加
prefix: /api
//自定义路由
routes:
Service1: /service_1_zuul/**
//禁止直接访问后台服务
ignored-services: Service1

启动项目后,访问http://localhost:8001/hello?name=world失败,网关禁止直接调用后台服务Service1。

通过网关访问http://localhost:6001/api/service_1_zuul/hello?name=world,可以轮询调用Service1和Service5。

6、Eureka Server集群

7、熔断降级功能

【Spring Cloud】实战项目搭建的更多相关文章

  1. 搭建一套ASP.NET Core+Nacos+Spring Cloud Gateway项目

    前言     伴随着随着微服务概念的不断盛行,与之对应的各种解决方案也层出不穷.这毕竟是一个信息大爆发的时代,各种编程语言大行其道,各有各的优势.但是有一点未曾改变,那就是他们服务的方式,工作的时候各 ...

  2. 3.开始使用Spring Cloud实战微服务

                     开始使用Spring Cloud实战微服务 3.1. Spring Cloud实战前提 3.1.1. 需要的技术储备 语言方面:可以使用Java.scala.Groo ...

  3. spring cloud实战 1-高可用注册中心

    创建父maven项目 提交代码至GitHub 创建eureka-server-1 项目搭建两种方式: 父pom中继承spring-boot-starter-parent,子pom中直接结成父pom.该 ...

  4. 优秀的Spring Cloud开源项目整理推荐

    无论是对于初学者,还是有一定工作经验的程序员来讲,Spring Cloud开源项目都是一笔宝贵的财富.下面给大家整理了十个优秀的开源项目,分别是spring-cloud-examples.spaasc ...

  5. [Spring Cloud实战 | 第六篇:Spring Cloud Gateway+Spring Security OAuth2+JWT实现微服务统一认证授权

    一. 前言 本篇实战案例基于 youlai-mall 项目.项目使用的是当前主流和最新版本的技术和解决方案,自己不会太多华丽的言辞去描述,只希望能勾起大家对编程的一点喜欢.所以有兴趣的朋友可以进入 g ...

  6. Spring Cloud实战 | 最终篇:Spring Cloud Gateway+Spring Security OAuth2集成统一认证授权平台下实现注销使JWT失效方案

    一. 前言 在上一篇文章介绍 youlai-mall 项目中,通过整合Spring Cloud Gateway.Spring Security OAuth2.JWT等技术实现了微服务下统一认证授权平台 ...

  7. Spring Cloud实战 | 最八篇:Spring Cloud +Spring Security OAuth2+ Axios前后端分离模式下无感刷新实现JWT续期

    一. 前言 记得上一篇Spring Cloud的文章关于如何使JWT失效进行了理论结合代码实践的说明,想当然的以为那篇会是基于Spring Cloud统一认证架构系列的最终篇.但关于JWT另外还有一个 ...

  8. Spring Cloud实战 | 第九篇:Spring Cloud整合Spring Security OAuth2认证服务器统一认证自定义异常处理

    本文完整代码下载点击 一. 前言 相信了解过我或者看过我之前的系列文章应该多少知道点我写这些文章包括创建 有来商城youlai-mall 这个项目的目的,想给那些真的想提升自己或者迷茫的人(包括自己- ...

  9. Spring Cloud实战 | 第十篇 :Spring Cloud + Seata 1.4.1 + Nacos1.4.0 整合实现微服务架构中逃不掉的话题分布式事务

    Seata分布式事务在线体验地址:https://www.youlai.store 本篇完整源码地址:https://github.com/hxrui/youlai-mall 有想加入开源项目开发的童 ...

  10. Spring Cloud实战: 基于Spring Cloud Gateway + vue-element-admin 实现的RBAC权限管理系统,实现网关对RESTful接口方法权限和自定义Vue指令对按钮权限的细粒度控制

    一. 前言 信我的哈,明天过年. 这应该是农历年前的关于开源项目 的最后一篇文章了. 有来商城 是基于 Spring Cloud OAuth2 + Spring Cloud Gateway + JWT ...

随机推荐

  1. 宝锋UV-5R说明书下载

    宝锋UV-5R说明书 百度网盘下载地址: 链接: https://pan.baidu.com/s/1QJXEJ2YyO7ovMAQG7Uur4A 提取码: j8d2 BI8EJM     73    ...

  2. servlet 的基础学习

    Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完 ...

  3. 03:H.264编码原理以及视频压缩I、P、B帧

    一:前言 H264是新一代的编码标准,以高压缩高质量和支持多种网络的流媒体传输著称,在编码方面,我理解的他的理论依据是:参照一段时间内图像的统计结果表明,在相邻几幅图像画面中, 一般有差别的像素只有1 ...

  4. 实现一个正则表达式引擎in Python(一)

    前言 项目地址:Regex in Python 开学摸鱼了几个礼拜,最近几天用Python造了一个正则表达式引擎的轮子,在这里记录分享一下. 实现目标 实现了所有基本语法 st = 'AS342abc ...

  5. Mysql学习笔记整理之选用B+tree结构

    为什么mysql不使用平衡二叉树? 数据处的深度决定着他的IO操作次数,IO操作耗时大 每一个磁盘块保存的数据量太小 B+Tree和B-Tree的区别? B+树几点关键字搜索采用闭合区间 B+树非叶节 ...

  6. 【linux】【mysql】mysql主从数据库

    系统环境:Centos7 主:192.168.8.162 从:192.168.8.127 前提条件 a.关闭防火墙  systemctl stop firewalld 关闭防火墙开机自启 system ...

  7. Cocos Creator实现左右跳游戏

    ​1. 玩法说明 游戏开始后,点击屏幕左右两侧,机器人朝左上方或右上方跳一步,如果下一步有石块,成功得1分,否则游戏结束. 2. 模块介绍 游戏场景分为2个:主页场景(home).游戏场景(game) ...

  8. Atm 测试

    Account.java package ATM;//信1705-1 20173628 赵路仓 public class Account { private int balance;//余额 priv ...

  9. Spring 梳理-数据访问-DB

    针对接口编程 DAO是指数据访问对象(data access object),它提供了数据读取和写入到数据库中的一种方式.Spring认为,它应该以接口的方式发布功能,而应用程序的其他部分需要通过接口 ...

  10. 使用maven开发javaweb项目

    想重新学习一下java web的知识,之前也学习过一些但是也没有用在开发中所以也忘的七七八八了,因为从事Android开发免不了要与服务器打交道,有时候想自己写一个小DEMO需要服务器的时候感觉真是很 ...