分布式微服务2

news2025/1/11 8:13:35

目录

Nacos注册中心

下载

启动

快速入门

1.在父工程中添加spring-cloud-alilbaba的管理依赖子模块添加nacos的客户端依赖

 2.子模块添加nacos的客户端依赖

3.子模块配置文件 

4.启动

Nacos服务分级存储模型

集群配置

nacos的负载均衡

Nacos环境隔离

新建命名空间

Nacos配置管理

1.在nacos中添加配置文件

2.从微服务拉取配置

配置热更新

1.方式一

 2.方式二

配置共享

1.添加一个共享的配置

2.运行两个服务,会有不同的结果

搭建Nacos集群

 1.复制三份nacos,更改他们的配置文件

 2.然后修改application.properties文件,添加数据库配置

3.修改conf/nginx.conf文件


Nacos注册中心

下载

在Nacos的GitHub页面,提供有下载链接,可以下载编译好的Nacos服务端或者源代码

 Nacos的默认端口是8848,如果你电脑上的其它进程占用了8848端口,请先尝试关闭该进程。

更改端口:

 

启动

cd到nacos\bin目录下,执行 startup.cmd -m standalone

 Nacos 默认账号密码都是nacos

快速入门

1.在父工程中添加spring-cloud-alilbaba的管理依赖子模块添加nacos的客户端依赖

<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-alibaba-dependencies</artifactId>
  <version>2.2.6.RELEASE</version>
  <type>pom</type>
  <scope>import</scope>
</dependency>

 2.子模块添加nacos的客户端依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

3.子模块配置文件 

此时要注释掉Eureka注册中心的配置

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/order-service?useSSL=false
    username: root
     password: 123456
    driver-class-name: com.mysql.jdbc.Driver
  application:
    name: orderservice
  cloud:
    nacos:
      server-addr: localhost:8848 #nacos服务地址

 

4.启动

 去nacos的服务页查看

 

 

Nacos服务分级存储模型

 

 

集群配置

spring:
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ # 集群名称

nacos的负载均衡

修改配置文件,加入负载均衡的配置信息

userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则 

 

NacosRule负载均衡策略

1.优先选择统同集群服务实例列表

2.本地集群找不到提供者,才会去其它集群寻找,并且会警告

3.确定了实例列表后,再采用随机负载均衡挑选实例

Nacos环境隔离

Nacos提供了namespace来实现环境隔离功能。

- nacos中可以有多个namespace

- namespace下可以有group、service等

- 不同namespace之间相互隔离,例如不同namespace的服务互相不可见

新建命名空间

 

 

 

修改配置文件,添加namespaces信息

spring:
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ
        namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 # 命名空间,填ID

 

 

Nacos配置管理

1.在nacos中添加配置文件

 

 

2.从微服务拉取配置

微服务要拉取nacos中管理的配置,并且与本地的application.yml配置合并,才能完成项目启动。

但如果尚未读取application.yml,又如何得知nacos地址呢?

因此spring引入了一种新的配置文件:bootstrap.yaml文件,会在application.yml之前被读取,流程如下:

引入依赖

<!--nacos配置管理依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

 添加bootstrap.yaml

spring:
  application:
    name: userservice # 服务名称
  profiles:
    active: dev #开发环境,这里是dev 
  cloud:
    nacos:
      server-addr: localhost:8848 # Nacos地址
      config:
        file-extension: yaml # 文件后缀名

添加逻辑读取配置

 

配置热更新

 

我们最终的目的,是修改nacos中的配置后,微服务中无需重启即可让配置生效,也就是**配置热更新**。

要实现配置热更新,可以使用两种方式:

1.方式一

在@Value注入的变量所在类上添加注解@RefreshScope:

 2.方式二

使用@ConfigurationProperties注解代替@Value注解。

在user-service服务中,添加一个类,读取patterrn.dateformat属性:

package com.tledu.user.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@Data
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
    private String dateformat;
}

在UserController中使用这个类代替@Value:


import com.tledu.user.config.PatternProperties;
import com.tledu.user.pojo.User;
import com.tledu.user.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @Autowired
    private PatternProperties patternProperties;

    @GetMapping("now")
    public String now(){
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(patternProperties.getDateformat()));
    }


}

配置共享

1.添加一个共享的配置

 

 

2.运行两个服务,会有不同的结果

 

搭建Nacos集群

 1.复制三份nacos,更改他们的配置文件

 2.然后修改application.properties文件,添加数据库配置

spring.datasource.platform=mysql

db.num=1

db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123

再分别修改他们的端口

3.修改conf/nginx.conf文件

下载nginx并解压

配置如下:

upstream nacos-cluster {
  server 127.0.0.1:8845;
  server 127.0.0.1:8846;
  server 127.0.0.1:8847;
}

server {
  listen       80;
  server_name  localhost;

  location /nacos {
    proxy_pass http://nacos-cluster;
  }
}

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

六、Linux 软件包管理

一、Linux 软件包管理简介 1、软件包分类 源码包 - 脚本安装二进制包 -&#xff08;RPM 包&#xff0c; 系统默认包&#xff09; 2、源码包优缺点 源码包优点&#xff1a; 开源&#xff0c;可以看到&#xff0c;并且可以修改源代码。可以自由选择所需要的工能。软件是编译安…

初识 Linux Shell

学习的第一步&#xff0c;就是要找到 Linux 终端的所在位置。目前较常见的图形化终端有 Konsole、Gnome terminal、xterm 等几种。一般安装后在各个发行版的菜单中搜索即可找到。Gnome terminal 和 Konsole 基本是当前各大流行 Linux 发行版预装最多的终端应用&#xff0c;功能…

分时电价环境下用户负荷需求响应分析方法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

升级JDK11后,执行java -version还是1.8

电脑同时安装两个JDK,如何来回切换1. JDK INSTALL1.1 Download1.2 配置环境变量2. 配置JDK11无效2.1 JDK切换3.Awakening1. JDK INSTALL 1.1 Download 官网下载 JDK Website: https://www.oracle.com/java/technologies/downloads/. oracle账密 zhaonan0212163.com Tomcat123…

论文翻译:Text-based Image Editing for Food Images with CLIP

使用 CLIP 对食物图像进行基于文本的图像编辑 图1&#xff1a;通过文本对食品图像进行处理的结果示例。最左边一栏显示的是原始输入图像。"Chahan"&#xff08;日语中的炒饭&#xff09;和 "蒸饭"。左起第二至第六列显示了VQGAN-CLIP所处理的图像。每个操作…

小程序项目学习--第六章:项目实战二、推荐歌曲-歌单展示-巅峰榜-歌单详情-页面优化

第六章&#xff1a;推荐歌曲-歌单展示-巅峰榜-歌单详情-页面优化 01_(掌握)音乐页面-推荐歌曲的数据获取和展示 推荐歌曲的数据获取的实现步骤 0.封装对应请求接口方法 export function getPlaylistDetail(id) {return hyRequest.get({url: "/playlist/detail",d…

Python中append浅拷贝机制

关于深浅拷贝&#xff0c;最直观的理解就是&#xff1a;深拷贝&#xff1a;拷贝的程度深&#xff0c;自己新开辟了一块内存&#xff0c;将被拷贝内容全部拷贝过来了&#xff1b;浅拷贝&#xff1a;拷贝的程度浅&#xff0c;只拷贝原数据的首地址&#xff0c;然后通过原数据的首…

分享158个ASP源码,总有一款适合您

ASP源码 分享158个ASP源码&#xff0c;总有一款适合您 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c; 158个ASP源码下载链接&#xff1a;https://pan.baidu.com/s/1DCXBAXJUNMZZpbyxVF5-bg?pwdbwuv 提取码&#x…

react native android环境搭建,使用vscode和夜神模拟器进行开发(适用于0.68+版本)

前言 react native官网教程 使用的是android studio搭建环境&#xff0c;本篇文章使用vscode和夜神模拟器进行搭建环境 版本说明&#xff1a; 0.68.0 及以上版本直接往下看0.67.4 及以下版本请查看另一篇文章&#xff1a;react native android环境搭建&#xff0c;使用vscod…

FineReport学习-【01 帆软报表入门】

界面功能 官方管理面板详解见这里 报表简介 报表类型 报表设计流程 新建数据连接 查看数据库连接&#xff0c;新建一个本地mysql的数据库 新建报表 新建数据集 实例操作 实例1 分组报表 新建文件夹&#xff0c;用来保存报表 将刚刚查询的数据表放入报表中&#xff0c;并插入表…

k8s核心资源ingress

一、简介ingress是分装到service层上层的一个模块&#xff0c;对外提供统一访问入口&#xff0c;ingress底层是nginx实现的&#xff0c;并且分装了域名访问。外界请求首先打到ingress层&#xff0c;ingress再转发给service层&#xff0c;service再负载均衡到其中的一个pod上。i…

关于符合车规的高精度定位产品

文章目录一、什么是P-Box二、ST的P-Box三、导远的P-Box四、华测的P-Box参考来源对于导航产品来说&#xff0c;下一个大的市场可能就是智能驾驶/辅助驾驶&#xff0c;研发符合车规的导航产品也逐渐成了行业趋势。组合导航产品的主流方案是外置的P-Box方案&#xff0c;只需要单GN…

excel定位选取:再谈快捷键Ctrl+G的妙用

一、仅复制可见单元格在日常工作中我们经常会涉及将隐藏或分类汇总后的数据&#xff0c;粘到一个新表。这个时候如果我们直接复制&#xff0c;粘贴会发生什么呢&#xff1f;这是一个分类汇总后的数据&#xff0c;自动生成了分级显示&#xff1a;第1级&#xff0c;总计&#xff…

uniapp提交应用市场打包问题和安装应用弹出隐私政策协议问题(Android)

uni-app 安卓App提交到应用市场踩坑记录&#xff0c;隐私合规检测&#xff0c;参考链接&#xff1a;https://juejin.cn/post/7163595800235212830 打包问题&#xff0c;同时支持32位和64位&#xff1b;https://uniapp.dcloud.net.cn/tutorial/app-android-abifilters.html# 重…

【Android Studio】【Flutter】Android Studio下Flutter环境搭建记录

目录&#xff1a;1、要学flutter&#xff0c;必须先学Dart语言&#xff08;类似C语言&#xff09;2、下载Flutter SDK&#xff08;软件开发工具包&#xff09;3、配置国内镜像4、Android Studio新建Flutter项目5、问题解决&#xff1a;&#xff08;运行flutter doctor命令检查问…

《流浪地球2》的冷思考:如何消除信息孤岛

硬核科幻影片《流浪地球2》成了热议焦点&#xff0c;网友们一方面点赞视觉特效的精益求精&#xff0c;另一方面为引爆月球的故事情节感动&#xff0c;片中一句“50岁以上的出列”让无数观众飙泪。在科技已经进步到地球能在宇宙中“流浪”的未来&#xff0c;仍需牺牲众多“老”宇…

ArkTS初学(一)

想必大家都听说过华为的方舟框架,没错&#xff0c;这就是所说的ArkTS。在HarmonyOS2的时候大家会使用java开发HarmonyOS应用&#xff0c;使用的是Layout来进行布局(用的还是xml文件),之后又出现了js的Component(记不清名字了)的一个功能方便了开发。我们现在就来学习HarmonyOS3…

【数据结构】ArrayList的具体使用(杨辉三角、扑克牌游戏)

目录 1、了解集合的框架 2、了解ArrayList类 2.1、认识ArrayList类当中的属性 2.1、认识ArrayList类库当中的方法 2.1.1、了解构造方法 2.2、ArrayList类当中的Add&#xff08;新增元素&#xff09;方法 2.3、了解ensureCapacityInternal&#xff08;判断是否需要扩容&…

【Rust】18. Rust 的面向对象特性

18.1 面向对象语言的特征 18.1.1 对象&#xff1a;数据 行为 18.1.2 封装隐藏了实现细节 在 Rust 中&#xff0c;在代码中不同的部分考虑使用 pub 可以封装其实现细节 18.1.3 继承&#xff0c;作为类型系统与代码共享 在 Rust 中&#xff0c;不存在继承的机制&#xff0c;而…

【C++11】初始化列表、decltype操作符、nullptr

目录 一、初始化列表 1.1 花括号初始化 1.2 initializer_list 二、decltype 三、nullptr 一、初始化列表 1.1 花括号初始化 在C98中&#xff0c;标准允许使用花括号{ }对数组或结构体元素进行统一的列表初始值设定。 而在C11推出后&#xff0c;使用初始化列表时&#x…