SpringCloud

微服务: 可以单独部署,单独运行(启动类)

狭义:

  • 集群:相同模块(系统)部署多个
  • 微服务:可独立运行的小系统
  • 分布式:由不同模块构建而成的系统

广义:

分布式、集群、微服务

服务调用方式

RPC和HTTP

无论是微服务还是SOA,都面临着服务间的远程调用。那么服务间的远程调用方式有哪些呢?

常见的远程调用方式有以下2种:

  • RPC:Remote Produce Call远程过程调用,类似的还有 。自定义数据格式,基于原生TCP通信,速度快,效率高。早期的webservice,现在热门的dubbo (12不再维护、17年维护权交给apache),都是RPC的典型代表

  • Http:http其实是一种网络传输协议,基于TCP,规定了数据传输的格式。现在客户端浏览器与服务端通信基本都是采用Http协议,也可以用来进行远程服务调用。缺点是消息封装臃肿,优势是对服务的提供和调用方没有任何技术限定,自由灵活,更符合微服务理念。现在热门的Rest风格,就可以通过http协议来实现。

跨域调用

跨域特指前端页面调用后端api,即前端页面在一个服务器,后端api在另外一个服务器,是浏览器安全保护行为,与后端没有关系。一般在前后端分离的项目中要解决跨域问题。解决跨域一般有以下几种方式:
(1)ajax+jsonp
(2)proxytable
(3)@CrossOrigin
(4)nginx代理
(5)response.setHeader(“Access-Control-Allow-Origin”, “*”);

远程调用

远程调用技术特指后端不同服务器之间的调用,例如在A服务的api中调用B服务的api。以下的技术都可以完成A服务调用B服务:
(1)dubbo+zookeeper
(2)springcloud中的eureka+feign
(3)httpclient/okhttp3
(4)spring中的RestTemplate
(5)webservice

搭建项目

image-20221109110910794

点击下一步

image-20221109111120857

修改后

image-20221109111304378

点击下一步

image-20221109111443127

点击下一步

image-20221109111509082

点击完成

image-20221109111537572

创建spring-provider、spring-consumer模块

image-20221109111744666

点击模块,选择Maven

image-20221109111923052

点击下一步,填写模块名称

image-20221109112110906

点击完成

image-20221109112146406

在spring-provider、spring-consumer模块中POM中引入WEB模块

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

增加配置文件application.yml

image-20221109112541147

spring-provider

application.yml

server:port: 8180

ProviderController

@RestController
public class ProviderController {@Value("${server.port}")private String port;@RequestMapping(value = "/provider/{id}")public String provider(@PathVariable String id){return "provider id = " + id + " port = " + port;}
}

运行结果

image-20221109153509257

spring-consumer

application.yml

server:port: 8280

ConsumerController

@RestController
public class ConsumerController {@RequestMapping(value = "/consumer/{id}")public String consumer(@PathVariable String id){return "consumer ";}
}

运行结果

image-20221109153435407

HttpClient和OkHttp3性能比

  • client连接为单例:
    单例模式下,HttpClient的响应速度要更快一些,单位为毫秒,性能差异相差不大
  • 非单例模式下,OkHttp的性能更好,HttpClient创建连接比较耗时,因为多数情况下这些资源都会写成单例模式。
  • HttpClient+okhttp+URLConnection

HttpClien

<dependency><groupId>commons-httpclient</groupId><artifactId>commons-httpclient</artifactId><version>3.1</version>
</dependency>
    /*** @title consumerHttp** @param: id* @updateTime 2022/11/9 15:09* @return: java.lang.String* @throws* @Description: HttpClient调用方式*/@RequestMapping(value = "/consumerHttp/{id}")public String consumerHttp(@PathVariable String id){String consumer = null;String url = "http://localhost:8180/provider/" + id;HttpClient httpClient = new HttpClient();GetMethod getMethod = new GetMethod(url);try {httpClient.executeMethod(getMethod);byte[] body = getMethod.getResponseBody();consumer = new String(body, "UTF-8");} catch (IOException e) {return "HttpClient consumer exception";}return "HttpClient consumer " + consumer;}

运行结果:

image-20221109151746124

okhttp3

<dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>4.9.2</version>
</dependency>
    /*** @title consumerok** @param: id* @updateTime 2022/11/9 15:25* @return: java.lang.String* @throws* @Description: OkHttpClient调用方式*/@RequestMapping(value = "/consumerok/{id}")public String consumerok(@PathVariable String id){String consumer = null;String url = "http://localhost:8180/provider/" + id;OkHttpClient okHttpClient = new OkHttpClient();Request request = new Request.Builder().url(url).build();Response response = null;try {response = okHttpClient.newCall(request).execute();consumer = response.body().string();} catch (IOException e) {return "OkHttpClient consumer exception";}return "OkHttpClient consumer " + consumer;}

运行结果:

image-20221109152448929

Spring的RestTemplate

RestTemplate 是从 Spring3.0 开始支持的一个 HTTP 请求工具,它提供了常见的REST请求方案的模版,例如 GET 请求、POST 请求、PUT 请求、DELETE 请求以及一些通用的请求执行方法 exchange 以及 execute。RestTemplate 继承InterceptingHttpAccessor 并且实现了 RestOperations 接口,其中 RestOperations 接口定义了基本的 RESTful 操作,这些操作在 RestTemplate 中都得到了实现

常用方法:

HTTP Method常用方法描述
GETgetForObject发起 GET 请求响应对象
GETgetForEntity发起 GET 请求响应结果、包含响应对象、请求头、状态码等 HTTP 协议详细内容
POSTpostForObject发起 POST 请求响应对象
POSTpostForEntity发起 POST 请求响应结果、包含响应对象、请求头、状态码等 HTTP 协议详细内容
DELETEdelete发起 HTTP 的 DELETE 方法请求
PUTput发起 HTTP 的 PUT 方法请求

声明restTemplateBean方式一

@Bean
public RestTemplate getRestTemplate(){return new RestTemplate();
}

声明restTemplateBean方式二

@Bean
public RestTemplate getRestTemplate(RestTemplateBuilder builder){return builder.build();
}

restTemplate远程调用

    @Autowiredprivate RestTemplate restTemplate;/*** @title consumerRest** @param: id* @updateTime 2022/11/9 15:28* @return: java.lang.String* @throws* @Description: restTemplate调用方式*/@RequestMapping(value = "/consumerRest/{id}")public String consumerRest(@PathVariable String id){String url = "http://localhost:8180/provider/" + id;String consumer = restTemplate.getForObject(url, String.class);return "restTemplate consumer " + consumer;}

运行结果:

image-20221109153025784

SpringCloud

微服务是一种架构方式,最终肯定需要技术架构去实施。

微服务的实现方式很多,目前Spring Cloud比较流行。为什么?

  • 后台硬:作为Spring家族的一员,有整个Spring全家桶靠山,背景十分强大。
  • 技术强:Spring作为Java领域的前辈,可以说是功力深厚,有强力的技术团队支撑。
  • 群众基础好:大多数程序员的成长都伴随着Spring框架,现在有几家公司开发不用Spring?SpringCloud与Spring的各个框架无缝整合,对大家来说一切都是熟悉的配方,熟悉的味道。
  • 使用方便:相信大家都体会到了SpringBoot给我们开发带来的便利,而SpringCloud完全支持SpringBoot的开发,用很少的配置就能完成微服务框架的搭建。

image-20221008093859011

简介

SpringCloud是Spring旗下的项目之一:

  • 官网地址:http://projects.spring.io/spring-cloud/
  • 中文地址:https://www.springcloud.cc/

Spring最擅长的就是集成,把世界上最好的框架拿过来,集成到自己的项目中。

SpringCloud也是一样,它将现在非常流行的一些技术整合到一起,实现了诸如:配置管理,服务发现,智能路由,负载均衡,熔断器,控制总线,集群状态等等功能。其主要涉及的组件包括:

  • Eureka:服务治理组件,包含服务注册中心,服务注册与发现机制的实现。(服务治理,服务注册/发现)
  • Zuul(gateway):网关组件,提供智能路由,访问过滤功能
  • Ribbon:客户端负载均衡的服务调用组件(客户端负载)
  • Feign(open feign):服务调用,给予Ribbon和Hystrix的声明式服务调用组件 (声明式服务调用)
  • Hystrix:容错管理组件,实现断路器模式,帮助服务依赖中出现的延迟和为故障提供强大的容错能力。(熔断、断路器,容错)

版本

因为Spring Cloud不同其他独立项目,它拥有很多子项目的大项目。所以它的版本是版本名+版本号 (如Angel.SR6)。

版本名:是伦敦的地铁名

版本号:SR(Service Releases)是固定的 ,大概意思是稳定版本。后面会有一个递增的数字。

所以 Edgware.SR3就是Edgware的第3个Release版本。

1528263985902

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/131258.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】指针详解(3)

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解指针(2)&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 一.函数指针数组二.指向函数指针数组的指针&#xff08;不重要&#xff09;三.回调函数 一.函…

【C++进阶】:红黑树

红黑树 一.红黑树简单实现1.性质二.更新颜色1.情况一2.情况二3.情况三 3.完整代码(代码有注释&#xff0c;稍微画图很容易理解,旋转部分可以看我的AVL树博客) 二.map和set1.基本实现2.迭代器 一.红黑树简单实现 1.性质 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个…

中国各省市相关图标

中国各省市相关图标

长胜证券:政策东风频吹 慢牛格局或已打开

长胜证券认为&#xff0c;目前商场遭到央行社融数据提振&#xff0c;全体预期出现了必定的回暖&#xff0c;经济运行的部分不确定性得以落地&#xff0c;8月社融数据作为先行指标提振了出资者信心。操作上看出资者可逐步加大仓位&#xff0c;选择前期调整较为充沛&#xff0c;有…

代码随想录算法训练营day50|123.买卖股票的最佳时机III|188.买卖股票的最佳时机IV

123.买卖股票的最佳时机III 力扣题目链接 给定一个数组&#xff0c;它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。 注意&#xff1a;你不能同时参与多笔交易&#xff08;你必须在再次购买前出售掉…

网络爬虫-----初识爬虫

目录 1. 什么是爬虫&#xff1f; 1.1 初识网络爬虫 1.1.1 百度新闻案例说明 1.1.2 网站排名&#xff08;访问权重pv&#xff09; 2. 爬虫的领域&#xff08;为什么学习爬虫 ?&#xff09; 2.1 数据的来源 2.2 爬虫等于黑客吗&#xff1f; 2.3 大数据和爬虫又有啥关系&…

el-select数据过多的解决(纯前端)

前言 el-select数据过多这个问题应该很多人都遇到过&#xff0c;在生产环境中数据几百、几千条是比较常见的。当数据过多时&#xff0c;就会造成浏览器卡顿&#xff0c;如果客户电脑性能不行&#xff0c;浏览器直接卡死也有可能。 解决 先说一下现在项目中遇到的两种解决方案…

python-爬虫-urllib3

导入模块 import urllib3urllib3&#xff1a;功能强大、条理清晰、用于HTTP客户端的python网络请求库 重要特征 1.线程安全 2.连接池 3.客户端SSL/TLS验证 4.使用分段编码长传文件 5.重试请求和处理HTTP复位的助手 6.支持gzip和deflate编码 7.HTTP和SOCKS的代理支持 8.100%的…

认识网线上的各种参数标号

最近工作需要&#xff0c;接触了很多不同类型的网线&#xff0c;为了能够区分不同型号的网线&#xff0c;特意做一篇笔记用来学习&#xff0c;如有记录有误之处&#xff0c;欢迎大家指正~初步认识网线 常用的网络电缆有三种&#xff1a;双绞线、同轴电缆和光纤电缆&#xff08…

uni-app 之 uni.request 网络请求API接口

uni-app 之 uni.request 网络请求API接口 image.png <template><!-- vue2的<template>里必须要有一个盒子&#xff0c;不能有两个&#xff0c;这里的盒子就是 view--><view>--- uni.request 网络请求API接口 ---<view><!-- 免费的测试接口 --…

Java线上故障排查(CPU、磁盘、内存、网络、GC)+JVM性能调优监控工具+JVM常用参数和命令

CPU/堆/类/线程 根据服务部署和项目架构&#xff0c;从如下几个方面排查&#xff1a; &#xff08;1&#xff09;运用服务器&#xff1a;排查内存&#xff0c;cpu,请求数等&#xff1b; &#xff08;2&#xff09;文件图片服务器&#xff1a;排查内存&#xff0c;cpu,请求数等…

Gateway网关

本章目标 学习目标 1、服务网关 Gateway 2、ServerWebExchange 服务网关Gateway API 网关是一个服务&#xff0c;是系统的唯一入口。从面向对象设计的角度看&#xff0c;它与外观模式类似。API 网关封装了系统内部架构&#xff0c;为每个客户端提供一个定制的 API 。它可能…

docker 方式安装mysql 主从方式keepalived实现高可用

一、环境介绍 二、MySQL安装 在两台服务器上都安装mysql 1、拉取镜像 docker pull mysql:8.0.272、创建挂载目录 mkdir -p /data/mysql/3、运行容器 主节点 docker run \--restartalways \--name master_mysql -p 3306:3306 \-e MYSQL_ROOT_PASSWORD123456 -d \-v /data/m…

FPGA开发

https://www.enclustra.com.cn/?bd_vid11435475462206745180 https://www.monolithicpower.cn/design-tools/design-tools/llc-design-tool.html https://www.elecfans.com/article/88/143/2012/20120718280641_2.html

HTTP协议初识·下篇

介绍 承接上篇&#xff1a;HTTP协议初识中篇_清风玉骨的博客-CSDN博客 本篇内容&#xff1a; 长链接 网络病毒 cookie使用&session介绍 基本工具介绍 postman 模拟客户端请求 fiddler 本地抓包的软件 https介绍 https协议原理 为什么加密 怎么加密 CA证书介绍 数字签名介绍…

阿里后端开发:抽象建模经典案例【文末送书】

文章目录 写作前面1.抽象思维2.软件世界中的抽象3. 经典抽象案例4. 抽象并非一蹴而就&#xff01;需要不断假设、验证、完善5. 推荐一本书 写作末尾 写作前面 在互联网行业&#xff0c;软件工程师面对的产品需求大都是以具象的现实世界事物概念来描述的&#xff0c;遵循的是人…

Tomcat多实例部署和动静分离

一、多实例部署&#xff1a; 多实例&#xff1a;多实例就是在一台服务器上同时开启多个不同的服务端口&#xff0c;同时运行多个服务进程&#xff0c;这些服务进程通过不同的socket监听不同的服务端口来提供服务。 1.前期准备&#xff1a; 1.关闭防火墙&#xff1a;systemctl …

Docker部署Canal监听MySQL binlog

文章目录 概念简述binlogCanal MySQL配置Canal配置创建挂载目录设置权限创建MySQl的Canal账户拉取镜像运行容器简单运行配置文件复制到宿主机修改配置文件删除之前运行的canal容器正式运行Canal容器 查看运行状态排查问题 概念简述 binlog MySQL的二进制日志binlog可以说是My…

揭秘跑腿小程序开发中的5个关键技巧,让你的应用一炮而红

作为专注于跑腿小程序开发多年的领域专家&#xff0c;我深知在如今激烈的市场竞争中&#xff0c;如何打造一个引人注目且成功的跑腿小程序是至关重要的。在本文中&#xff0c;我将为大家揭秘跑腿小程序开发中的5个关键技巧&#xff0c;助你的应用一炮而红。无论你是一个初学者还…

【Fiddler】mac m1 机器上使用 fiddler 抓取接口

mac m1 机器上使用 fiddler 抓取接口&#xff08;非虚拟机模式&#xff09; author: jwensh date:2023.09.12 文章目录 mac m1 机器上使用 fiddler 抓取接口&#xff08;非虚拟机模式&#xff09;1. 环境准备2. 进行配置3. 使用情况 1. 环境准备 想要抓取 mac 上浏览器的接口&a…