SpringCloud 小案例 -- SpringCloud netfilx 使用
目录
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 使用相关推荐
- SpringCloud学习(一) SpringCloud 基础介绍
作者:FrancisQ 链接:https://juejin.cn/post/6844904007975043079 来源:掘金 什么是Spring cloud 构建分布式系统不需要复杂和容易出错.Sp ...
- SpringCloud Alibaba与SpringCloud的区别是什么?
SpringCloud Alibaba与SpringCloud的区别是什么? 一.SpringCloud是什么? 二.SpringCloud Alibaba是什么? 二.SpringCloud Ali ...
- Eureka使用小案例
Eureka架构中的三个核心角色: 服务注册中心:Eureka的服务端应用,提供服务注册和发现功能 服务提供者:提供服务的应用,可以是SpringBoot应用,也可以是其它技术实现,只要对外提供的是R ...
- Python:通过一个小案例深入理解IO多路复用
通过一个小案例深入理解IO多路复用 假如我们现在有这样一个普通的需求,写一个简单的爬虫来爬取校花网的主页 import requests import timestart = time.time()u ...
- iptables小案例,nat表应用
2019独角兽企业重金招聘Python工程师标准>>> iptables小案例: 需求1: 只针对filter表,预设INPUT链DROP,其他两个链ACCEPT,然后针对192.1 ...
- 4.10/4.11/4.12 lvm讲解 4.13 磁盘故障小案例
4.10/4.11/4.12 lvm讲解 操作流程: 磁盘分区-->创建物理卷-->划分为卷组-->划分成逻辑卷-->格式化.挂载-->扩容. 磁盘分区 注: 创建分区时 ...
- python程序实例教程基础-编程小案例
编程小案例 本小节实现一个通讯录管理程序,通过这个案例来融会贯通之前所学习的知识,该程序使用到如下知识点: 条件选择 循环 列表 字典 键盘输入 屏幕输出 编写程序 addr-manage.py 实现 ...
- axios vue 回调函数_Vue 02 —— Vue 入门小案例~使用 Axios 中的GET、POST请求
作为后端攻城狮,写前端代码是一种什么体验? 相信不少人和 @Python大星 一样,有写过前端代码的经历. 记录一下,Vue 框架开发中"啼笑皆非"的故事,非专业前端人员,该案例无 ...
- 【Node.js学习小案例】DNS域名解析 一
Node.js 百度百科: Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台, 用来方便地搭建快速的 易于扩展的网络应用· Node.js 借助事件驱动, 非阻塞I/ ...
最新文章
- java绘等高线图_Matplotlib中的极坐标等高线图
- 看到了商机,为什么赚不到钱?
- 教你用纯Java实现一个网页版的Xshell(附源码)
- 【重要】做AI项目,找有三AI,100+研发人员为你服务
- HDU 5389 Zero Escape
- 13.2.3 视图层——视图函数
- 从bsp redirect到ui5_ui5
- [渝粤教育] 西南科技大学 中国现代文学 在线考试复习资料
- 属性和方法的区别是什么_白醋,米醋,香醋,陈醋有什么区别呢?使用方法不同,功效也不同...
- (转)Bootstrap 之 Metronic 模板的学习之路 - (2)源码分析之 head 部分
- 支付宝:伪装的“支付宝”、“花呗”来了,警惕!
- 字符串常量在内存中的存放位置由系统自动安排。_C++核心编程--内存分区模型...
- 随想录(OllyDbg和IDA Pro的配合使用)
- python 词云 fontpath_Python酷炫词云图原来可以这么玩?
- 公司决策层时刻想着:怎样开展业务,怎样防止公司完蛋
- js 判断移动终端浏览器版本信息
- Python微信远程控制摄像头-拍摄女朋友坐电脑前聊天时表情
- python实现指纹识别毕业论文_(完整版)指纹识别系统本科毕业论文
- (NeurIPS 2019) Learning Object Bounding Boxes for 3D Instance Segmentation on Point Clouds
- php realpath()