pc下载网站模板/搜索引擎seo是什么
注册中心
在微服务架构中,注册中心是最核心的基础服务之一
主要涉及到三大角色:
服务提供者 ---生产者
服务消费者
服务发现与注册
它们之间的关系大致如下:
1.各个微服务在启动时,将自己的网络地址等信息注册到注册中心,注册中心存储这些数据。
2.服务消费者从注册中心查询服务提供者的地址,并通过该地址调用服务提供者的接口。
3.各个微服务与注册中心使用一定机制(例如心跳)通信。如果注册中心与某微服务长时间无法通信,就会注销该实例。
4.微服务网络地址发送变化(例如实例增加或IP变动等)时,会重新注册到注册中心。这样,服务消费者就无需人工修改提供者的网络地址了。
nacos简介
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速
实现动态服务发现、服务配置、服务元数据及流量管理。
从上面的介绍就可以看出,nacos的作用就是一个注册中心,用来管理注册上来的各个微服务
nacos实战入门
安装
下载win或linux版本
Nacos 快速开始
启动
win
startup.cmd -m standalone
linux
先进入解压的bin目录下
sh startup.sh -m standalone
访问
http://localhost:8848/nacos
默认账号密码都是 nacos
基于 http://t.csdnimg.cn/iFbUc的继续配置
快速回顾:
上篇文章中 父级项目 demo01 子级 comm service 孙级 order product
comm 放置实体类 service 放置生产者和消费者
1.service的pom文件引入依赖
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2.在主启动类上添加nacos的开启注解(Order消费者的启动类上)
@EnableDiscoveryClient // 当前的微服务是可以被nacos发现的
3. 在application.properties添加nacos的配置
a.设置微服务的名字
b.设置端口号
c.添加到注册中心,将该服务交给注册中心去管理
spring.application.name=order server.port=8081 #设置注册中心的地址 spring.cloud.nacos.discovery.server-addr=localhost:8848
对product进行复制,命名product1
完成如上配置后启动消费者与两个生产者
服务调用的负载均衡
什么是负载均衡
通俗的讲, 负载均衡就是将负载(工作任务,访问请求)进行分摊到多个操作单元(服务器,组件)上 进行执行。
根据负载均衡发生位置的不同,一般分为服务端负载均衡和客户端负载均衡。
服务端负载均衡指的是发生在服务提供者一方,比如常见的nginx负载均衡
而客户端负载均衡指的是发生在服务请求的一方,也就是在发送请求之前已经选好了由哪个实例处理请求。
负载均衡
order 的pom引入依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
配置策略:
package com.example.config;import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.loadbalancer.core.RandomLoadBalancer;
import org.springframework.cloud.loadbalancer.core.ReactorLoadBalancer;
import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier;
import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.core.env.Environment;public class LoadBalancerConfig {@BeanReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment,LoadBalancerClientFactory loadBalancerClientFactory) {String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME); //loadbalancer.client.name// 对应的需要进行负载均衡的名字是什么System.out.println("======"+name);// productreturn new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);}
}
使用策略:
package com.order;import com.order.config.LoadBalancerConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClient;
import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClients;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;@SpringBootApplication
@LoadBalancerClients(defaultConfiguration = LoadBalancerConfig.class// product 会使用这个策略// @LoadBalancerClient(value = "product",configuration= LoadBalancerConfig.class)
)
public class OrderAppliaction {public static void main(String[] args) {SpringApplication.run(OrderAppliaction.class);}@Bean// @LoadBalancedpublic RestTemplate getRestTemplate(){return new RestTemplate();}
}
四 基于Feign实现服务调用
FeignClient和RestTemplate
SpirngCloud 中,默认是使用HTTP进行微服务间通信,其中最常用的有两种实现形式
- RestTemplate
- Feign
RestTempale
- 其实在SpringWeb里面,已经原生支持了 RestTemplate,只不过我们一般使用的是把请求URL直接写死,而不是通过服务名的形式来调用,但是在微服务架构中,因为有了注册中心的存在,我们的负载均衡可以不需要使用第三方软件或者硬件实现了,所有,我们最佳的方式是经过服务名访问,请求到那个实例,由 负载均衡策略来替我们决定。
- ribbion中的负载均衡策略了解
Spring Cloud 中 7 种负载均衡策略!
自定义策略(了解)
第一种写法:
直接使用 RestTemplate , Url写死
第二种写法:
拼接url的方式
@Resource
private LoadBalancerClient loadBalancerClient;
@Override
public boolean addOrder(Integer pid) {ServiceInstance choose = loadBalancerClient.choose("product");String requestMsg = "方式二 GET 请求 RibbonServer";String url = String.format("http://%s:%s", choose.getHost(), choose.getPort() + "/pro/t-product/findById/"+pid);TProduct forObject = restTemplate.getForObject(url, TProduct.class);System.out.println(forObject);//添加订单if(forObject.getKucun()>0){//添加订单TOrder oreder=new TOrder();oreder.setNum(1);oreder.setPid(pid);oreder.setUid(1);boolean save = this.save(oreder);return save;//oreder.se}return false;
}
利用 LoadBalancerClient 通过应用名获取 url,然后再使用 RestTemplate 请求
使用DiscoveryClient拼接url
@Resource
private DiscoveryClient discoveryClient;
@GetMapping("addOrder/{pid}")
public Result addOrder(@PathVariable("pid") Integer pid){List<ServiceInstance> serviceId = discoveryClient.getInstances("product");//如果有俩相同的微服务 不能定死是第一个 不然就没有任何的意义//随机产生数字int i = new Random().nextInt(serviceId.size());System.out.println("服务******"+i);ServiceInstance instance = serviceId.get(i);// id username productnameOrder order=new Order();order.setId(1);order.setUsername("于永利");System.out.println("http://"+instance.getHost()+":"+instance.getPort()+"/getById/"+pid);//商品的名字Result result= restTemplate.getForObject("http://"+instance.getHost()+":"+instance.getPort()+"/getById/"+pid,Result.class);ObjectMapper objectMapper=new ObjectMapper();Product pro = objectMapper.convertValue(result.getT(), Product.class);//jackson//HashMap<String,String> product=(HashMap) result.getT();order.setProductname(pro.getName());return new Result(order);}
第三种写法:
使用OpenFeign
OpenFeign默认的负载均衡规则是轮循
修改pom文件
<!--使用openFeign-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
启动类上开启注解
@EnableFeignClients
调用
@FeignClient
service接口:
如果有异常 回滚到哪一个类里面
@FeignClient(value="product",fallback = TOrderServiceImpl.class)
public interface ITOrderService{
}
feign接口的实现类
service的实现类
@Service
public class TOrderServiceImpl implements ITOrderService {@Overridepublic TProduct addOrder(Integer pid) {System.out.println("你调用我了吗");if(pid==0){System.out.println("出错啦!!!!");}return null;}
}
使实现类生效
加jar
<!-- --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency>
开启openfeign对sentinel的支持
(在application.properties中编写)
feign.sentinel.enabled=true
正在赶工。。。
相关文章:

微服务nacos实战入门
注册中心 在微服务架构中,注册中心是最核心的基础服务之一 主要涉及到三大角色: 服务提供者 ---生产者 服务消费者 服务发现与注册 它们之间的关系大致如下: 1.各个微服务在启动时,将自己的网络地址等信息注册到注册中心&#x…...

PyCharm 远程连接服务器并使用服务器的 Jupyter 环境
❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…...

HBase中的数据表是如何用CHAT进行分区的?
问CHA:HBase中的数据表是如何进行分区的? CHAT回复: 在HBase中,数据表是水平分区的。每一个分区被称为一个region。当一个region达到给定的大小限制时,它会被分裂成两个新的region。 因此,随着数据量的增…...

rabbitMQ的direct模式的生产者与消费者使用案例
消费者C1的RoutingKey 规则按照info warn 两种RoutingKey匹配 绑定队列console package com.esint.rabbitmq.work03;import com.esint.rabbitmq.RabbitMQUtils; import com.rabbitmq.client.Channel; import com.rabbitmq.client.DeliverCallback;/*** 消费者01的消息接受*/ p…...

分布式应用服务拆分
需求落地分布式应用服务 将需求转化为分布式应用服务的过程可以按照以下步骤进行: 理解需求:首先,你需要仔细阅读和理解业务需求。与相关的利益相关者(如业务分析师、产品经理等)进行沟通,确保你对需求的理…...

matplotlib 绘制双纵坐标轴图像
效果图: 代码: 由于使用了两组y axis,如果直接使用ax.legend绘制图例,会得到两个图例。而下面的代码将两个图例合并显示。 import matplotlib.pyplot as plt import numpy as npdata np.random.randint(low0,high5,size(3,4)) …...

74基于matlab的PSO-ELM的多输入,单输出结果预测,输出训练集和测试机预测结果及误差。
基于matlab的PSO-ELM的多输入,单输出结果预测,输出训练集和测试机预测结果及误差,适应度值。数据可更换自己的,程序已调通,可直接运行。 74matlabPSO-ELM多输入单输出 (xiaohongshu.com)...

shell之head命令
head命令 head命令是UNIX和Linux环境中常用的命令,用于在标准输出上显示文件的开头内容。 具体来说,head命令默认会显示给定文件开头的10行内容。如果指定了多个文件名,head命令会逐个显示每个文件的开头内容,并在每个文件显示的…...

网络安全之了解安全托管服务(MSS)
数字化已深入千行百业。数字化将给各行各业带来巨大的变化,现实世界和虚拟世界也将联系得更加紧密。随着云计算、大数据等新技术结合企业级业务的落地,数字时代的安全面临着前所未有的新挑战。近年来,网络安全问题日益严重,在企业…...

linux进程间通信之共享内存(mmap,shm_open)
共享内存,顾名思义就是允许两个不相关的进程访问同一个逻辑内存,共享内存是两个正在运行的进 程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常为同一段物理内存。进程可以将同一段物理内存连接到他们自己的地址空间中,…...

C/C++---------------LeetCode第1748.唯一元素的和
唯一元素的和 题目及要求哈希算法暴力算法在main里使用 题目及要求 给你一个整数数组 nums 。数组中唯一元素是那些只出现 恰好一次 的元素。 请你返回 nums 中唯一元素的 和 。 示例 1: 输入:nums [1,2,3,2] 输出:4 解释:唯…...

什么是好用的HR人才测评?
对于HR来说,选用一个合适的测评工具,我想不外乎以下几点: 1、成本可控 不是所有的HR都能申请到足够的资金,去做专业的人才测评,尤其是中小企业,这可是一笔不小 的开支。即使是基层普通岗位的成本…...

【ARM Trace32(劳特巴赫) 使用介绍 5 -- Trace32 scan dump 详细介绍】
文章目录 1.1 JTAG 测试逻辑架构1.2 D型扫描触发器1.2.1 全扫描介绍1.3 IR 寄存器1.4 TDR(Test data registers)1.4.1 TDR 的实现1.4.1.1 Bypass Register1.4.1.2 Boundary-scan register1.5 Scan Dump1.5.1 soft fusion1.1 JTAG 测试逻辑架构 图 1-1 片上测试逻辑概念图 如前面…...

Java版B/S架构云his医院信息管理系统源码(springboot框架)
一、技术框架 ♦ 前端:AngularNginx ♦ 后台:JavaSpring,SpringBoot,SpringMVC,SpringSecurity,MyBatisPlus,等 ♦ 数据库:MySQL MyCat ♦ 缓存:RedisJ2Cache ♦ 消息队…...

面试经典(2/150)移除元素
面试经典(2/150)移除元素 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要…...

基于JavaWeb+SpringBoot+掌上社区疫苗微信小程序系统的设计和实现
基于JavaWebSpringBoot掌上社区疫苗微信小程序系统的设计和实现 源码获取入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种…...

python_主动调用其他类的成员
# 主动调用其他类的成员 # 方式一: class Base(object):def f1(self):print("5个功能") class Foo(object):def f1(self):print("3个功能")# Base.实例方法(自己传self),与继承无关Base.f1(self)obj Foo() obj.f1()print("#"*20)# 方式二:按照类…...

Pytorch部分报错问题
一、存在问题 1.链接库报错 问题报错:undefined symbol: __nvJitLinkAddData_12_1, version libnvJitLink.so.12 2.GPU不能使用 问题报错:在torch安装后测试gpu是否可用 torch.cuda.is_available() false 返回false 问题分析: 可能是…...

cmmlu数据处理
cmmlu数据处理 数据处理数据地址代码解析数据处理 from glob import glob import pandas as pd from tqdm import tqdmtrain_data_path_list = glob("test/*") val_data_path_list = glob("dev/*") tran_data = pd.<...

【ARM Trace32(劳特巴赫) 使用介绍 2.2 -- TRACE32 进阶命令之 DIAG 弹框命令】
请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】 上篇文章:【ARM Trace32(劳特巴赫) 使用介绍 2.1 – TRACE32 Practice 脚本 cmm 脚本学习】 下篇文章:【ARM Trace32(劳特巴赫) 使用介绍 3 - trace32 访问运行时的内存】 文章目录 DIALOG.OK 命令DIA…...

黑马程序员微服务 分布式搜索引擎3
分布式搜索引擎03 0.学习目标 1.数据聚合 **聚合(aggregations)**可以让我们极其方便的实现对数据的统计、分析、运算。例如: 什么品牌的手机最受欢迎?这些手机的平均价格、最高价格、最低价格?这些手机每月的销售…...

Python正则表达式学习笔记(入门)
1. 介绍 正则表达式是一种强大的模式匹配工具,用于处理文本数据。在Python中,我们使用re模块来操作正则表达式。 2. 基本语法 建议先看 "5. re模块函数"了解search和match的区别"和 2.3 特殊字符转义"了解如何应对特殊符号 2.1 字…...

C++核心编程 day09 类型转换、异常、输入输出流
C核心编程 day09 类型转换、异常、输入输出流 1. 类型转换2. 异常2.1 异常语法2.2 C标准异常库 3. 输入输出流3.1 输入输出流概念以及流类库3.2 标准输入流3.3 标准输出流3.4 文件读写 1. 类型转换 C中的类型转换有四类,分别是静态转换、动态转换、常量转换、重新解…...

Docker安装PostgreSQL
拉取镜像 docker pull postgres 运行容器 docker run --name postgres-db -e TZPRC -e POSTGRES_USERroot -e POSTGRES_DBdatabase -e POSTGRES_PASSWORD123456 -p 5432:5432 -v /Users/xiaoping/byx/postgresql/data:/var/lib/postgresql/data -d postgres run,…...

py并发编程实践-demo
需求 已知条件:appX -请求-> api 多进程实现并发请求api 给定app应用列表,请求api核数 from datetime import datetime, timedelta from multiprocessing import Processclass ProcessTest(object):"""多进程并发请求APIÿ…...

1-2 暴力破解-模拟
模拟:根据题目要求编写代码 可分为:图形排版(根据某种规则输出特定图形)、日期问题、其他模拟 一.图形排版 1.输出梯形(清华大学) 法一:等差数列 分析:每行的星号个数为等差数列2n2…...

机器学习中的Bagging思想
Bagging(Bootstrap Aggregating)是机器学习中一种集成学习方法,旨在提高模型的准确性和稳定性。Bagging的思想源自于Bootstrap采样技术,其基本原理如下: Bootstrap采样: Bagging的核心思想是通过对原始数据…...

基于PyTorch搭建你的生成对抗性网络
前言 你听说过GANs吗?还是你才刚刚开始学?GANs是2014年由蒙特利尔大学的学生 Ian Goodfellow 博士首次提出的。GANs最常见的例子是生成图像。有一个网站包含了不存在的人的面孔,便是一个常见的GANs应用示例。也是我们将要在本文中进行分享的…...

ROS话题(Topic)通信:自定义msg - 例程与讲解
在 ROS 通信协议中,数据是以约定好的结构传输的,即数据类型,比如Topic使用的msg,Service使用的srv,ROS 中的 std_msgs 封装了一些原生的数据类型,比如:Bool、Char、Float32、Int64、String等&am…...

【Vue配置项】 computed计算属性 | watch侦听属性
目录 前言 computed计算属性 什么是计算属性? Vue的原有属性是什么? 得到的全新的属性是什么? 计算属性怎么用? 计算属性的作用是什么? 为什么说代码执行率高了? computed计算属性中的this指向 co…...