Java阶段五Day05

news2024/12/28 5:10:28

Java阶段五Day05

文章目录

  • Java阶段五Day05
    • 问题解析
      • 无法启动Naocs
    • Nacos服务注册发现
      • Nacos运行架构
        • nacos-server是一个服务进程
      • 配置注册
        • 服务端客户端
        • csmall-for-jsd-business-adapter 整合nacos-client
        • yaml详细配置
        • 注册信息在nacos中的内存状态
        • 多实例注册
        • 服务抓取(发现)
        • 总结nacos的服务注册发现机制
      • 配置中心
        • 应用场景
        • 配置中心运行结构
        • 远程配置案例
        • bootstrap配置nacos读取远程其他属性

问题解析

无法启动Naocs

  • 命令输入错误
bin>startup.cmd -m standalone
  • jdk环境不支持nacos

最低使用jdk1.8

  • idea配置nacos启动项
  1. 启动项配置界面

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mC3z55SI-1689244378932)(assets/image-20230713090257309.png)]

  1. 添加新的配置项shell script

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UvP1M1Zk-1689244378933)(assets/image-20230713090409008.png)]

  1. 填充启动配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6vnBCCv1-1689244378933)(assets/image-20230713090703106.png)]

  1. 启动脚本启动项

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zDddD5pp-1689244378934)(assets/image-20230713091049634.png)]

Nacos服务注册发现

nacos作为服务治理的组件,可以提供服务的协调管理功能包括

服务注册,服务发现

  • CURL简介

该命令可以在系统中发送一个自定义的http请求,命令格式

curl -X [请求方式] [请求路径]

访问百度

curl -X GET https://www.baidu.com

访问nacos注册

curl -X POST "http://localhost:8848/nacos/v1/ns/instance?serviceName=first-service&ip=127.0.0.1&port=8080"

Nacos运行架构

nacos-server是一个服务进程

运行在web容器中,可以接收外界发起的请求,比如我们模拟post请求在nacos进行数据的注册

配置注册

服务端客户端

csmall-for-jsd-business-adapter 整合nacos-client

  • 所有组件配置步骤 —— 大三步

    • 依赖
    • yaml配置
    • 配置类,注解的使用(nacos客户端没有)
  • 逐步完成

  1. 项目中引入nacos服务治理客户端依赖

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gKLpAkxm-1689244378934)(assets/image-20230713093437364.png)]

<!--nacos-注册抓取-client-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
  1. yaml配置
#微服务配置
#在微服务架构中,表示微服务名字
#不同的命令表示功能不一样,相同的名字,功能接口都相同
spring:
  application:
    name: csmall-business
  #微服务cloud配置
  cloud:
    #微服务cloud中组件nacos
    nacos:
      #nacos中注册发现的功能
      discovery:
        #填写nacos的服务端地址
        server-addr: localhost:8848
  1. 在nacos控制台出现注册信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RNbFL8F6-1689244378935)(assets/image-20230713094835109.png)]

配置管理(need): 了解学习nacos配置中心功能

服务管理(need): 微服务架构中的服务治理功能,在控制台可以看到注册信息,服务状态实例的个数等

权限控制: 用户,访问的权限管理,课上一直使用nacos/nacos

命名空间(need): 管理不同开发环境的配置隔离

集群管理: nacos可以配置集群

课堂跟踪练习

cartorderstock 整理nacos客户端组件,启动,连接nacos-server实现注册管理

注意: 服务名称不同,保证启动正常.

练习问题

a. 找不到nacos

nacos没启动

b.找不到nacos,nacos提供服务端路径地址错误

c. 无法解决程序启动问题

pull代码,对比不同

yaml详细配置

  • 临时实例,永久实例

同一个服务,可以启动多个实例,形成一个服务集群.

当前启动进程是永久实例还是临时实例 true 表示临时实例 false表示永久实例

spring.cloud.nacos.discovery.ephemeral=fasle

永久实例:nacos永远不删除的注册信息,就是永久实例

临时实例:暂时为某些应用,环境准备的扩容实例,就是定义为临时实例

例如: 淘宝每一个功能都是一个服务,而且具备多个实例,平日访问是固定流量,所以使用永久实例支持,如果双11来临,流量激增,需要增加临时实例,等待11完成,删除临时实例

  • 客户端实例的ip地址

服务器ip地址有多个,因为配置多个网卡,有的网卡是外部访问的,有的网卡是局域网网卡,所以客户端web实例在nacos注册希望被别人访问调用一般会考虑是内部调用还是外部调用.

为了防止springboot自动读取的ip地址未必满足实例相互调用的需求,一般情况下,认为确定到底是哪个ip地址,填充到这个属性,携带到nacos

spring.cloud.nacos.discovery.ip=10.6.15.126
  • 命名空间

开发过程中,使用的开发,测试,上线环境是不同.所以nacos提供隔离的环境
在这里插入图片描述

默认情况下,只有public公用命名空间

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nk4VXF7w-1689244378936)(assets/image-20230713105716797.png)]

创建完新的命名空间,可以在服务列表中看到隔离的注册信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UVG4LgoU-1689244378936)(assets/image-20230713105904132.png)]

  • 分组配置

在同一个命名空间注册的服务实例,可以进行分组操作.主要功能之一 —— 灰度发布

简单介绍一下灰度发布: 开发项目,项目发布的特点两个 一个是持续发布,一个是版本发布. 持续发布特点中,有灰度发布的概念

  • 服务心跳检测

服务实例启动后,会在nacos注册一个信息

后续服务实例和nacos服务端会保持一个心跳检测的机制.如果心跳检测结果失败,nacos就会认为这个实例不健康,会剔除实例或者保存不健康状态

永久实例:故障,宕机.不会在心跳检测时,保持健康状态,但是不会剔除

临时实例:故障,宕机,就会在一段时间之后,进行剔除

spring.cloud.nacos.discovery.heart-beat-interval=5
spring.cloud.nacos.discovery.ip-delete-timeout=20

临时实例,主动发送心跳请求,每次请求都会更新nacos服务端记录的这个实例的时间戳

每隔5秒发送一次.如果nacos服务端发现有某个时间点,应该心跳,但是没有更新时间戳,记录当前实例不健康,如果心跳更新时间超时20秒没更新,剔除了

永久实例,心跳不是主动上传的,而是nacos向下探测

注册信息在nacos中的内存状态

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S79hk1ov-1689244378936)(assets/image-20230713115418990.png)]

中午作业: 将cart order stock 根据yaml配置,注册在nacos 和business是同一个命名空间(同一个运行环境),在同一个分组(版本是相同的)

多实例注册

需求目的: 使用idea的配置启动项,让business服务,启动3个.同时注册nacos

修改配置项

服务抓取(发现)

nacos提供了接口访问,进行数据的注册/心跳上传.

注册的数据是为了让别的服务发现,从而使用其中的ip:port进行远程调用

所以nacos还提供了,发现的接口

curl -X GET "http://localhost:8848/nacos/v1/ns/instance/list?serviceName=csmall-business"

总结nacos的服务注册发现机制

  • nacos结构:
    • 角色2个: 服务端(nacos-server进程),客户端(spring cloud整合到web应用组件)
  • nacos功能:
    • 服务注册: 在微服务中,服务注册目的,是为了让别的服务发现,获取当前服务信息
    • 服务发现: 为了调用别的服务,从而在nacos进行信息的抓取

配置中心

应用场景

在微服务开发过程中,yaml文件 json文件 properties文件,非常多的冗余重复的内容.

不方便统一管理.

例如: 开发环境连接的redis 110.99.88.77:8999,20多个服务,全部在开发环境指向这个redis.用了2天,运维提示服务器崩溃了。 redis环境换了 111.99.88.77:8999

需求: 将重复的配置,提取到通用的管理平台-nacos

配置中心运行结构

远程配置案例

目的: 想将stockcartorderbusiness相同的配置,全部都放到nacos,本地只看到不同的个性的内容(端口,服务名称)

第一步: 在本地进程添加config 依赖 和bootstrap 依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--springboot版本大于2.3.X,需要引入这个依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

第二步: 需要引入一个bootstrap.yaml文件

上面的bootstrap依赖,就是为了让springboot启动的时候加载这个bootstrap.yaml文件的

bootstrap.yaml 能够被springboot加载,并且先于 application.yaml文件加载的

application.yaml启动进程的参数配置

bootstrap.yaml收集环境信息的参数配置. 读取到远程文件配置内容,放回application.yaml使用

如果远程读的数据和application.yaml冲突的. application.yaml会覆盖远程读取的.

spring:
  profiles:
    #开启不同环境配置
    active: dev

#bootstrap定义不同环境,在同一个文件bootstrap.yaml
#---区分,每个环境中定义名称
---
spring:
  config:
    activate:
      on-profile: dev
  #告诉bootstrap 远程配置中心nacos地址 和我们要读取的配置文件(先读默认的)
  application:
    #所有的application.name都是服务名称
    name: csmall-stock
  cloud:
    nacos:
      config:
        #必须配置的值
        server-addr: localhost:8848
        #文件类型 后缀 默认是properties txt json yaml xml html
        file-extension: yaml
        #前缀,默认是服务名称
        
---
spring:
  config:
    activate:
      on-profile: test

这种配置方式,读取文件的逻辑

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rmGVuNm1-1689244378938)(assets/image-20230713152815297.png)]

通过bootstrap+nacosconfig配置,默认读取的文件格式

{spring.application.name}-{spring.profiles.active}.{file-extension}

服务名称-环境名称.文件后缀扩展

对于当前stock服务,应该在nacos中准备一个文件 csmall-stock-dev.yaml

没有指定具体的命名空间,没有指定分组

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7ioFsCmQ-1689244378939)(assets/image-20230713153642620.png)]

填写具体的文件信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MPCkzV66-1689244378940)(assets/image-20230713153958929.png)]

当前根据bootstrap.yaml的属性,要求默认读取的3个文件

只有服务名称

服务名称.后缀名

服务名称-环境名称.后缀名,

任何一个都可以使用

将远程csmall-stock-dev.yaml 提取本地公用配置

name: wang
#公共配置
mybatis:
  configuration:
    cache-enabled: false   # 不启用mybatis缓存
    map-underscore-to-camel-case: true # 映射支持驼峰命名法
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 将运行的sql输出到控制台
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/csmall_db?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
  cloud:
    nacos:
      #nacos中注册发现的功能
      discovery:
        #填写nacos的服务端地址
        server-addr: localhost:8848
        #当前启动进程是永久实例还是临时实力 true 表示临时实力 false表示永久实例
        #true是默认值
        ephemeral: true
        #nacos实例的ip地址
        ip: 127.0.0.1
        #命名空间
        namespace: f033ea8e-15ca-4f37-b112-127edc03de9e
        #分组
        group: 1.0
        #心跳检测的间隔时间
        heart-beat-interval: 5
        #超时心跳删除时间
        ip-delete-timeout: 20

bootstrap配置nacos读取远程其他属性

spring:
  profiles:
    #开启不同环境配置
    active: dev

#bootstrap定义不同环境,在同一个文件bootstrap.yaml
#---区分,每个环境中定义名称
---
spring:
  config:
    activate:
      on-profile: dev
  #告诉bootstrap 远程配置中心nacos地址 和我们要读取的配置文件(先读默认的)
  application:
    #所有的application.name都是服务名称
    name: csmall-stock
  cloud:
    nacos:
      config:
        #必须配置的值
        server-addr: localhost:8848
        #文件类型 后缀 默认是properties txt json yaml xml html
        file-extension: yaml
        #前缀,默认是服务名称,不想使用默认值,可以自定义
        #prefix: sdlaslkdfjsdlj
        #多环境运行的 namespace 命名空间的id
        #namespace: f033ea8e-15ca-4f37-b112-127edc03de9e
        #持续发布中,保证灰度发布 分组
        #group: 1.0
        #是否支持刷新.远程配置一旦修改,本地进程内存数据是否刷新,如果刷新,true,不需要重启
        #false 重启,内存才变动 默认也是true
        refresh-enabled: true
        #读取指定的文件
        shared-configs:
          - data-id: redis.yaml
            group: 1.0
            refresh-enable: true
          - data-id: datasource.yaml
            group: 1.0
            refresh-enable: true
          - data-id: es.yaml
            group: 1.0
            refresh-enable: true

---
spring:
  config:
    activate:
      on-profile: test

课堂跟踪案例

使用以下两个项目完成跟踪案例需求:

csmall-stock

csmall-cart

同时读取远程一个配置了datasource的属性文件,datasource.yaml,

同时读取远程一个配置了nacos注册信息的属性文件,nacos.yaml

同时读取远程mybatis配置,mybatis.yaml

注意: 如果完成了cartstock的远程读取配置,后续就一直需要启动nacos 读取配置文件

作业的nacos配置中心:

datasource.yaml

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bus06dHw-1689244378940)(assets/image-20230713180051371.png)]

nacos.yaml

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kYwIdSQk-1689244378941)(assets/image-20230713180129702.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2s5VsY4H-1689244378941)(assets/image-20230713180147057.png)]

mybatis.yaml

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-05Wr5x6A-1689244378942)(assets/image-20230713180114745.png)]

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

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

相关文章

五大引擎全新升级!轻流 5.0 正式发布

轻流的5.0版本&#xff0c;一个“陪伴企业成长的一站式开发平台”&#xff0c;它将更加灵活、更加开放&#xff0c;同时更加低门槛。 ——轻流联合创始人&CPO 严琦东 7月6日&#xff0c;在一年一度的无代码无边界 202376Day 轻流无代码探索者大会上&#xff0c;轻流联合创…

SpringMVC实现对页面的访问和跳转~

初识MVC: MVC是一种软件架构的思想&#xff0c;将软件按照模型&#xff0c;视图&#xff0c;控制器来划分 M&#xff1a;Model&#xff0c;模型层&#xff0c;指工程中的JavaBean,作用是处理数据 JavaBean分为两类&#xff1a; 一类称为实体类Bean:专门存储业务数据的&…

Java 中线程相关的各种锁

一、Java对象与锁 1、对象结构 2、对象头的 Mark Word 二、锁介绍 1、概念和种类 1、乐观锁 不加锁&#xff0c;在使用数据时判断数据是不是最新。常用CAS算法实现 2、自旋锁 与 适应性自旋锁 两者并不是锁&#xff0c;而是锁提供的处理方式。 自旋锁&#xff08;JDK1.4&a…

Sentinel 熔断与限流

文章目录 1 是什么&#xff1f;2 特征3 特性4 与Hystrix的区别5 两个部分6 应用6.1 依赖6.2 配置文件 7 流量配置规则7.1 直接&#xff08;默认&#xff09;7.2 关联7.3 Warm Up 预热7.4 排队等待 8 熔断降级8.1 概述RT(平均响应时间&#xff0c;秒级)异常比列(秒级)异常数(分钟…

python-cv2模块安装

1.自动安装 如果网络环境好&#xff1a; pip install opencv-python2.卸载与安装指定版本 卸载opencv pip uninstall opencv-python安装指定版本的cv 指定版本为&#xff1a;4.5.4.60 pip install opencv-python 4.5.4.603.下载安装包安装 从官网下载正确安装包安装&#x…

【Linux工具】编译器、调式器、项目自动化构建工具以及git的使用2(make/makefile和git的基本使用)

【Linux工具】编译器、调式器、项目自动化构建工具以及git的使用2&#xff08;make/makefile和git的基本使用&#xff09; 目录 【Linux工具】编译器、调式器、项目自动化构建工具以及git的使用2&#xff08;make/makefile和git的基本使用&#xff09;背景make和makefile的用法…

Proxy-Reflect使用详解

1 监听对象的操作 2 Proxy类基本使用 3 Proxy常见捕获器 4 Reflect介绍和作用 5 Reflect的基本使用 6 Reflect的receiver Proxy-监听对象属性的操作(ES5) 通过es5的defineProperty来给对象中的某个参数添加修改和获取时的响应式。 单独设置defineProperty是只能一次设置一…

AppStorage, OnboardingView 的示例

1. AppStorage 数据简单存储的实现 /// 应用程序数据简单存储 struct AppStorageBootcamp: View {//State var currentUserName: String?AppStorage("name") var currentUserName: String?var body: some View {VStack(spacing: 20) {Text(currentUserName ?? &…

Ghostscript开源PDF库中发现关键漏洞

在Linux中广泛使用的PostScript语言和PDF文件开源解释器Ghostscript被发现存在严重远程代码执行漏洞。 该漏洞被标记为CVE-2023-3664&#xff0c;CVSS v3评级为9.8&#xff0c;影响10.01.2之前的所有Ghostscript版本&#xff0c;10.01.2是三周前发布的最新版本。 据Kroll公司…

深入理解netfilter和iptables

目录 Netfilter的设计与实现 内核数据包处理流 netfilter钩子 钩子触发点 NF_HOOK宏与Netfilter裁定 回调函数与优先级 iptables 内核空间模块 xt_table的初始化 ipt_do_table() 复杂度与更新延时 用户态的表&#xff0c;链与规则 conntrack Netfilter(结合iptable…

基于C语言设计的足球信息查询系统

完整资料进入【数字空间】查看——baidu搜索"writebug" 需求分析与概要设计 2.1 项目说明 我们小组的选题主要是面向足球爱好者&#xff0c;在普通社交软件的基础之上&#xff0c;围绕足球的主题展开设计&#xff0c;以便于他们能够更好的交流相关的话题&#xff…

高效编程的捷径:HbuilderX的独特之处

目录 引言HbuilderX的功能HbuilderX的优点HbuilderX的缺点总结 HBuilderX 官网 引言 在当今科技发展日新月异的时代&#xff0c;软件开发已成为一个极富挑战性且高需求的领域。为了在竞争激烈的市场中脱颖而出&#xff0c;程序员们需要掌握一系列高效编程的技巧和工具。在这个过…

谈一谈LLM在推荐域的一些理解

作者&#xff1a;陈祖龙(葬青) 一、前言 最近大模型真的很火&#xff0c;从个人到公司&#xff0c;各行各业都在学习大模型、总结大模型和尝试应用大模型。大模型其实不是一个新的产物&#xff0c;已经在NLP发展了很多年。ChatGPT的诞生&#xff0c;经验的效果震惊了所有人&…

ES系列--es初探

一、前言 一般传统数据库&#xff0c;全文检索都实现的很鸡肋&#xff0c;因为一般也没人用数据库存文本字段。进 行全文检索需要扫描整个表&#xff0c;如果数据量大的话即使对 SQL 的语法优化&#xff0c;也收效甚微。建 立了索引&#xff0c;但是维护起来也很麻烦&#xff0…

人工智能-电脑如何像人一样思考?

发展历史 在电影如 终结者、机械公敌 中&#xff0c;机器人为什么能够像人一样思考&#xff1f;其实这就是人工智能。人工智能多方面&#xff1a;例如人脸识别系统、肺部影响CT&#xff0c;手机中的美颜、垃圾邮件拦截、自动驾驶 。 上世纪30-50年代&#xff0c;随着计算机科…

服务器如何查库磁盘情况?

查库磁盘情况 du -h --max-depth1 ./ | sort -hr

九九乘法表案例

for循环嵌套 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</titl…

Linux5.15 Zookeeper集群 + Fafka集群

文章目录 计算机系统5G云计算第四章 LINUX Zookeeper集群 Fafka集群一、Zookeeper1.Zookeeper 概述1&#xff09;Zookeeper 定义2&#xff09;Zookeeper 工作机制3&#xff09;Zookeeper 特点4&#xff09;Zookeeper 数据结构5&#xff09;Zookeeper 应用场景6&#xff09;Zoo…

unittest与pytest自动化测试框架

引言 前面一篇文章已经介绍了python单元测试框架&#xff0c;大家平时经常使用的是unittest&#xff0c;因为它比较基础&#xff0c;并且可以进行二次开发&#xff0c;如果你的开发水平很高&#xff0c;集成开发自动化测试平台也是可以的。而这篇文章主要讲unittest与pytest的区…

大华相机接入web页面实现人脸识别

先看下效果&#xff0c;中间主视频流就是大华相机&#xff08;视频编码H.264&#xff09;&#xff0c;海康相机&#xff08;视屏编码H.265&#xff09; 前端接入视屏流代码 <!--视频流--><div id"col2"><div class"cell" style"flex: …