装饰协会网站源码,怎么cms做网站,高端做网站公司,小程序制作卡片列表注册中心原理
注册中心可以统一管理项目中的所有服务 服务治理中的三个角色分别是什么?
服务提供者: 暴露服务接口#xff0c;供其它服务调用服务消费者: 调用其它服务提供的接口注册中心: 记录并监控微服务各实例状态#xff0c;推送服务变更信息
消费者如何知道提供者的…注册中心原理
注册中心可以统一管理项目中的所有服务 服务治理中的三个角色分别是什么?
服务提供者: 暴露服务接口供其它服务调用服务消费者: 调用其它服务提供的接口注册中心: 记录并监控微服务各实例状态推送服务变更信息
消费者如何知道提供者的地址?
服务提供者会在启动时注册自己信息到注册中心消费者可以从注册中心订阅和拉取服务信息
消费者如何得知服务状态变更?
服务提供者通过心跳机制向注册中心报告自己的健康状态当心跳异常时注册中心会将异常服务剔除并通知订阅了该服务的消费者
当提供者有多个实例时消费者该选择哪一个?
消费者可以通过负载均衡算法从多个实例中选择一个
Nacos注册中心
Nacos是目前企业中占比最多的注册中心组件。它是阿里巴巴的产品目前已经加入SpringcloudAlibaba中。 官网: Nacos 快速开始 我们基于Docker来部署Nacos的注册中心首先要准备MySQL数据库表用来存储Nacos的数据。
执行资料中的nacos.sql文件, 创建数据库环境 资料中提供了nacos的配置文件, 主要配置了nacos与mysql的连接信息
PREFER_HOST_MODEhostname
MODEstandalone
SPRING_DATASOURCE_PLATFORMmysql //数据库类型
// MYSQL_SERVICE_HOST192.168.1.97 //MySql服务地址, 改为自己的虚拟机IP地址
MYSQL_SERVICE_HOSTmysql //mysql使用了自定义网络, 所以要通过网络名连接
MYSQL_SERVICE_DB_NAMEnacos //数据表名称
MYSQL_SERVICE_PORT3306 //数据库端口
MYSQL_SERVICE_USERroot //数据库用户名
MYSQL_SERVICE_PASSWORD123 //数据库登录密码
MYSQL_SERVICE_DB_PARAMcharacterEncodingutf8connectTimeout1000socketTimeout3000autoReconnecttrueuseSSLfalseallowPublicKeyRetrievaltrueserverTimezoneAsia/Shanghai
资料中提供了nacos镜像文件, 和配置文件一起上传至root目录下 加载本地镜像 启动nacos服务
docker run -d \
--name nacos \
--env-file ./nacos/custom.env \
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
--restartalways \
--network hm-net \
nacos/nacos-server:v2.1.0-slim
--restartalways 设置开机自启 查看nacos日志 访问nacos服务 http://192.168.1.97:8848/nacos/#/login 默认账密: nacos/nacos
服务注册
引入nacos discovery依赖
!--nacos 服务注册发现--
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId
/dependency 配置Nacos地址
spring:application:name: item-service #服务名称cloud:nacos :server-addr:192.168.150.101:8848 #nacos地址 模拟多实例部署 服务发现
消费者需要连接nacos以拉取和订阅服务因此服务发现的前两步与服务注册一样后面再加上服务调用
引入nacos discovery依赖
!--nacos 服务注册发现--
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId
/dependency
配置nacos地址
spring:application:name: cart-service #服务名称cloud:nacos :server-addr: 192.168.1.97:8848 #nacos地址
服务发现
Service
RequiredArgsConstructor
public class CartServiceImpl extends ServiceImplCartMapper, Cart implements ICartService {// 使用discoveryClient客户端进行服务拉取private final DiscoveryClient discoveryClient;... ...private void handleCartItems(ListCartVO vos) {// 1.获取商品idSetLong itemIds vos.stream().map(CartVO::getItemId).collect(Collectors.toSet());// 2.查询商品// 2.1 根据服务名称获取服务的实例列表ListServiceInstance instances discoveryClient.getInstances(item-service);if(CollUtil.isEmpty(instances)) {return;}// 2.2 手写负载均衡,从实例列表中随机挑选一个实例ServiceInstance instance instances.get(RandomUtil.randomInt(instances.size()));//2.3 使用restTemplate远程调用商品服务ResponseEntityListItemDTO response restTemplate.exchange(instance.getUri() /items?ids{ids},HttpMethod.GET,null,new ParameterizedTypeReferenceListItemDTO() {},Map.of(ids, CollUtil.join(itemIds, ,)));... ...}}购物车模块调用商品模块, 2个商品服务实例被随机访问