目录

SpringCloud 套餐介绍

实操

1.创建注册中心 demo-registy (Eureka-server框架)

2.创建第一个服务提供者 demo-provider

3.创建第二个服务提供者 demo-provider2

4.创建服务消费者 demo-consumer

5. 调用远程服务

5.1 方法一:使用 RestTemplate 工具类调用

5.2 方式二:使用服务消费 Feign 框架


SpringCloud 套餐介绍

  • springcloud 有两个主流的套餐

套餐1:netfilx(这是一家公司的名称,网飞、奈飞):springcloud netfilx 这就是netfilx这家公司提供的一套微服务解决方案,这套解决方案有很多技术,技术1 注册中心 Eurake,技术2负载均衡Ribbon 等等

套餐2:阿里巴巴的 springcloud alibaba

实操

  • 操作流程

    1.新建一个空项目

    2.在这个空项目下,新建4个模块,一个注册中心,两个服务提供者,一个服务消费者

  • 这里使用的是 springcloud netfilx ,springboot 版本 2.3.7

1.创建注册中心 demo-registy (Eureka-server框架)

1.1 导入依赖

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency>

1.2 配置注册中心 application.properties

# 应用名称
spring.application.name=demo-registry
# 应用服务 WEB 访问端口,官网默认端口8761,随意改
server.port=8761
​
# 是否注册到注册中心,因为此项目本身就是注册中心,所以不用注册到注册中心,所以配置为false,这里默认配置是 ture 的
eureka.client.register-with-eureka=false
​
# 是否允许从注册中心拉取服务,但是此项目本身就是注册中心,所以配置为false
eureka.client.fetch-registry=false
​
# 配置的注册中心的注册地址,本身就是注册中心,下面这段可以不写,因为源码里就有这个默认值
eureka.client.service-url.defaultZone=http://localhost:8761/eureka

1.3 在启动类上加注解 @EnableEurekaServer

@SpringBootApplication
@EnableEurekaServer  //允许当前项目以注册中心的身份启动
public class DemoRegistryApplication {
​public static void main(String[] args) {SpringApplication.run(DemoRegistryApplication.class, args);}
​
}
  • 这时候启动项目,访问http://localhost:8761,可以访问到,说明注册中心创建成功

2.创建第一个服务提供者 demo-provider

2.1 导入依赖

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency>

2.2 配置注册到服务中心 application.properties

# 应用名称
spring.application.name=demo-provider
# 应用服务 WEB 访问端口
server.port=8081
​
# 因为此项目是服务提供者,需要把服务注册到注册中心,所以配置为true,这里默认是true的
eureka.client.register-with-eureka=true
​
# 允许从注册中心拉去服务,此项目是服务提供者,所以配置true,这里默认是true的
eureka.client.fetch-registry=true
​
# 配置的注册中心的注册地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka

2.3 在启动类上加注解 @EnableEurekaClient

@SpringBootApplication
@EnableEurekaClient  //服务提供者身份启动
public class DemoProviderApplication {
​public static void main(String[] args) {SpringApplication.run(DemoProviderApplication.class, args);}}

2.4 编写一个接口

@RestController
@RequestMapping("/provider")
public class ProviderController {
​@RequestMapping("/demo")public String demo(){return "服务提供者1";}
​
}
  • 启动项目,访问 http://localhost:8761 ,可以看到 demo-provider 服务注册到注册中心,说明创建服务者成功

3.创建第二个服务提供者 demo-provider2

3.1 再建一个项目 demo-provider2,服务名还是叫 demo-provider

  • 所有的配置跟 demo-provider 一样,接口名也一样,服务内容改一改,端口号改一改

3.2 配置 application.properties

3.3 编写 controller,除了内容不一样,接口名什么的都跟 demo-provider 一样

  • 启动 demo-provider2 项目,访问 http://localhost:8761 ,可以看到服务名为 demo-provider 有两个服务

4.创建服务消费者 demo-consumer

4.1 导入依赖

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
​<!-- 发现服务提供者需要的包 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>
​<!-- 注册到注册中心需要的包 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency>

4.2 配置注册到服务中心 application.properties

# 应用名称
spring.application.name=demo-consumer
# 应用服务 WEB 访问端口
server.port=8082
​
# 因为此项目是服务消费者,需要注册到注册中心,配置为 true,这里默认是 true
eureka.client.register-with-eureka=true
​
# 允许从注册中心拉去信息,此项目是服务消费者,所以配置true,这里默认是 true
eureka.client.fetch-registry=true
​
# 配置的注册中心的注册地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka

4.3在启动类上加注解 @EnableDiscoveryClient

@SpringBootApplication
@EnableDiscoveryClient   //服务消费者身份启动
public class DemoConsumerApplication {
​public static void main(String[] args) {SpringApplication.run(DemoConsumerApplication.class, args);}
​
}

4.4编写一个接口,远程调用服务消费者提供的服务

5. 调用远程服务

5.1 方法一:使用 RestTemplate 工具类调用

  • RestTemplate 调用方式默认是支持复制均衡(它支持负载均衡的框架是 Ribbon,默认是加入了Ribbon,Ribbon是实现负载均衡的框架)

Ribbon与Nginx的负载均衡的区别:

  • Nginx主要是做服务器直接的负载均衡,可以做静态资源负载均衡

  • Ribbon是代码级别的负载均衡,这个职责单一

5.1.1 编写 RestTemplateConfig

@Configuration
public class RestTemplateConfig {
​@Bean //将当前方法创建的 Bean 交给 spring 管理@LoadBalanced //支持负载均衡public RestTemplate restTemplate(){RestTemplate template = new RestTemplate();return template;}
​
}

5.1.2 编写 controller

@RestController
@RequestMapping("/consunmer")
public class Demo {
​@Autowiredprivate RestTemplate template;
​@RequestMapping("/getData")public String test(){//参数1:请求地址//参数2:响应返回值//参数3:请求参数// 服务提供者那边接口没有参数,所有这里也不用写String object = template.getForObject("http://demo-provider/provider/demo", String.class);
​return object;}
​
}
  • 访问 http://localhost:8082/consunmer/getData ,会发现,一下得到的结果是 “服务提供者1”,一下是“服务提供者2”,这里的比例趋量于1:1

  • 从上可以看到,请求地址 http://demo-provider/provider/demo ,这里是通过服务名 demo-provider 来调用里面的接口。说明这里默认就是支持负载均衡的。

5.2 方式二:使用服务消费 Feign 框架

  • Fegin 框架封装了 RestTemplate 完成服务消费功能,以更加简洁的方式来消费服务提供者

5.2.1 导入依赖

        <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-feign</artifactId><version>1.4.7.RELEASE</version></dependency>

5.2.2 配置启动类 @EnableFeignClients

@SpringBootApplication
@EnableDiscoveryClient   //服务消费者身份启动
@EnableFeignClients     //开启 Feign 进行服务调用
public class DemoConsumerApplication {
​public static void main(String[] args) {SpringApplication.run(DemoConsumerApplication.class, args);}
​
}

5.2.3 使用 Feign,需要写一个接口 PrviderServier

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
​
@FeignClient("demo-provider")  //参数配置是服务提供者的服务名称
@RequestMapping("/provider")
public interface ProviderService {
​@RequestMapping("/demo")public String demo();
​
}

5.2.4 编写 controller

@RestController
@RequestMapping("/consumer")
public class Demo {
​// 方法一:使用 RestTemplate 工具类调用@Autowiredprivate RestTemplate template;
​// 方法二:使用服务消费 Fegin 框架@Autowiredprivate ProviderService providerService;
​// 方法一@RequestMapping("/getData")public String test(){//参数1:请求地址//参数2:响应返回值//参数3:请求参数String object = template.getForObject("http://demo-provider/demo", String.class);System.out.println("调用:"+ object);return object;}
​// 方法二:使用服务消费 Fegin 框架@RequestMapping("/getData2")public String test2(){String demo = providerService.demo();System.out.println("调用:" + demo);return demo;}
​
}
  • 访问 http://localhost:8082/consunmer/getData2,会发现,一下得到的结果是 “服务提供者1”,一下是“服务提供者2”,这里的比例趋量于1:1

SpringCloud 小案例 -- SpringCloud netfilx 使用相关推荐

  1. SpringCloud学习(一) SpringCloud 基础介绍

    作者:FrancisQ 链接:https://juejin.cn/post/6844904007975043079 来源:掘金 什么是Spring cloud 构建分布式系统不需要复杂和容易出错.Sp ...

  2. SpringCloud Alibaba与SpringCloud的区别是什么?

    SpringCloud Alibaba与SpringCloud的区别是什么? 一.SpringCloud是什么? 二.SpringCloud Alibaba是什么? 二.SpringCloud Ali ...

  3. Eureka使用小案例

    Eureka架构中的三个核心角色: 服务注册中心:Eureka的服务端应用,提供服务注册和发现功能 服务提供者:提供服务的应用,可以是SpringBoot应用,也可以是其它技术实现,只要对外提供的是R ...

  4. Python:通过一个小案例深入理解IO多路复用

    通过一个小案例深入理解IO多路复用 假如我们现在有这样一个普通的需求,写一个简单的爬虫来爬取校花网的主页 import requests import timestart = time.time()u ...

  5. iptables小案例,nat表应用

    2019独角兽企业重金招聘Python工程师标准>>> iptables小案例: 需求1: 只针对filter表,预设INPUT链DROP,其他两个链ACCEPT,然后针对192.1 ...

  6. 4.10/4.11/4.12 lvm讲解 4.13 磁盘故障小案例

    4.10/4.11/4.12 lvm讲解 操作流程: 磁盘分区-->创建物理卷-->划分为卷组-->划分成逻辑卷-->格式化.挂载-->扩容. 磁盘分区 注: 创建分区时 ...

  7. python程序实例教程基础-编程小案例

    编程小案例 本小节实现一个通讯录管理程序,通过这个案例来融会贯通之前所学习的知识,该程序使用到如下知识点: 条件选择 循环 列表 字典 键盘输入 屏幕输出 编写程序 addr-manage.py 实现 ...

  8. axios vue 回调函数_Vue 02 —— Vue 入门小案例~使用 Axios 中的GET、POST请求

    作为后端攻城狮,写前端代码是一种什么体验? 相信不少人和 @Python大星 一样,有写过前端代码的经历. 记录一下,Vue 框架开发中"啼笑皆非"的故事,非专业前端人员,该案例无 ...

  9. 【Node.js学习小案例】DNS域名解析 一

    Node.js 百度百科: Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台, 用来方便地搭建快速的 易于扩展的网络应用· Node.js 借助事件驱动, 非阻塞I/ ...

最新文章

  1. java绘等高线图_Matplotlib中的极坐标等高线图
  2. 看到了商机,为什么赚不到钱?
  3. 教你用纯Java实现一个网页版的Xshell(附源码)
  4. 【重要】做AI项目,找有三AI,100+研发人员为你服务
  5. HDU 5389 Zero Escape
  6. 13.2.3 视图层——视图函数
  7. 从bsp redirect到ui5_ui5
  8. [渝粤教育] 西南科技大学 中国现代文学 在线考试复习资料
  9. 属性和方法的区别是什么_白醋,米醋,香醋,陈醋有什么区别呢?使用方法不同,功效也不同...
  10. (转)Bootstrap 之 Metronic 模板的学习之路 - (2)源码分析之 head 部分
  11. 支付宝:伪装的“支付宝”、“花呗”来了,警惕!
  12. 字符串常量在内存中的存放位置由系统自动安排。_C++核心编程--内存分区模型...
  13. 随想录(OllyDbg和IDA Pro的配合使用)
  14. python 词云 fontpath_Python酷炫词云图原来可以这么玩?
  15. 公司决策层时刻想着:怎样开展业务,怎样防止公司完蛋
  16. js 判断移动终端浏览器版本信息
  17. Python微信远程控制摄像头-拍摄女朋友坐电脑前聊天时表情
  18. python实现指纹识别毕业论文_(完整版)指纹识别系统本科毕业论文
  19. (NeurIPS 2019) Learning Object Bounding Boxes for 3D Instance Segmentation on Point Clouds
  20. php realpath()

热门文章

  1. 竞争性传输函数:compet
  2. micropython人脸识别代码_【雕爷学编程】MicroPython动手做(03)——零基础学MaixPy之开机测试...
  3. Android开发工具类集合
  4. python的难点在哪里_python厉害在哪里?看看python大牛怎么说
  5. 网络操作系统之对等式局域网
  6. es6 语法,在 IE 中不兼容的处理办法
  7. 基于node建立聊天室浅谈
  8. lougu3906 Geodetic
  9. QT ODBC连接数据库读取中文乱码的一个解决方法
  10. 互联网巨头吃小鱼:终端背后的十亿消费者