springboot第33集:nacos图

./startup.sh -m standalone

aa310e4a89cf6471628a7daa484ab84e.jpeg

  • Nacos是一个内部微服务组件,需要在可信的内部网络中运行,不可暴露在公网环境,防止带来安全风险。

  • Nacos提供简单的鉴权实现,为防止业务错用的弱鉴权体系,不是防止恶意攻击的强鉴权体系。

鉴权

https://nacos.io/zh-cn/docs/v2/guide/user/auth.html

d4cf0efa0d502ff650ac0589bdaf922b.png

3e915d414a077d166bbd3a1b805b7c55.png

6fbc2ba918f49989c4692139e28b173e.png

8e86393ee30f2796b9cf942df0f89c46.png
049511e3d3d09ccfcb0512fab2520c2d.png

d7d5aebf4574ec2584aed34d445bae2f.png
image.png
c7f3369eda3557a8b0cf60a5fa93cda7.png
image.png
5c19d8dd07b321eaa512658158a5bc9c.png
image.png
ceebf8d5f5f497f351c67a599cd7840b.png
image.png
59cc455b9154aa5673bf3865577a55e6.png
image.png
6039f106b15c761ff4f96a8b6e8da540.png
image.png
4f994a826df3452187fca1be80b666bb.png
image.png
f6bbc08adc00a60d958df3c53e504b4f.png
image.png
1ba5bae102d0bad88853c67f188d8fce.png
image.png

在Spring Boot后端中,RPC代表远程过程调用(Remote Procedure Call)。RPC是一种通信机制,它允许不同计算机或进程间的程序能够相互调用彼此的函数或方法,就像调用本地函数一样。

在分布式系统中,当应用程序的各个部分分布在不同的服务器上,需要相互之间进行通信和协作时,RPC是非常有用的。通过RPC,应用程序可以将请求发送到远程服务器上的方法或服务,并获取返回结果,就好像这些方法或服务是在本地执行的一样。

Spring Boot本身并不提供RPC的实现,但是它可以与其他RPC框架集成,如:

  1. gRPC: 由Google开发的高性能、跨语言的RPC框架,使用Protocol Buffers(protobuf)作为默认的序列化协议。

  2. Apache Dubbo: 一种基于Java的高性能、轻量级的RPC框架,提供了丰富的功能和可插拔的扩展点。

  3. Apache Thrift: 由Apache开发的跨语言的RPC框架,支持多种编程语言,并提供了丰富的数据类型和服务定义。

  4. Spring Cloud: 尽管不是专门的RPC框架,但它提供了在微服务架构中实现RPC风格通信的能力,例如通过RESTful API或Feign客户端。

要在Spring Boot应用程序中使用RPC,您需要:

  1. 选择一个适合您的需求的RPC框架,并在项目中添加相关的依赖。

  2. 根据RPC框架的文档和示例配置和实现服务端和客户端。

  3. 在客户端中调用远程服务的方法,将请求发送到远程服务器并处理返回结果。

需要注意的是,RPC通常比本地方法调用涉及更多的网络通信,因此在设计RPC接口时需要考虑网络延迟和异常处理,以确保系统的可靠性和性能。

与硬件通信交互在物联网应用中是一种常见的需求。Spring Boot作为后端框架,可以与硬件进行通信,实现物联网功能。下面是一般实现物联网的基本步骤以及后端处理的方法:

  1. 硬件设备选择:首先,您需要选择适合您物联网项目的硬件设备。这可以是传感器、执行器、嵌入式设备等,取决于您的具体应用场景。

  2. 通信协议选择:在与硬件通信时,您需要选择合适的通信协议。常见的通信协议有MQTT、CoAP、HTTP等。您应该根据硬件设备和网络环境的特点选择最适合的协议。

  3. 连接硬件设备:在Spring Boot后端中,您可以使用相应的通信库或框架来实现与硬件设备的通信。例如,如果选择MQTT协议,您可以使用Eclipse Paho或者Spring Integration的MQTT支持来建立与硬件设备的连接。

  4. 设计API和数据格式:定义与硬件设备交互的API和数据格式。这涉及到如何发送命令到硬件设备,以及如何解析硬件设备发送回来的数据。使用JSON或其他轻量级的数据格式可以方便数据交换。

  5. 处理数据和业务逻辑:一旦与硬件设备建立了连接,并通过API交互,后端需要处理从硬件设备接收到的数据。您可以编写相应的业务逻辑来处理这些数据,例如存储到数据库、进行实时分析等。

  6. 安全性:在物联网应用中,安全性非常重要。确保与硬件设备之间的通信是安全的,可以使用加密和身份验证机制来保护通信的安全性。

  7. 异常处理:在与硬件设备通信时,可能会出现通信故障或其他异常情况。后端需要做好异常处理,保证系统的稳定性和可靠性。

Sentinel 环境

熔断降级组件,https://github.com/alibaba/Sentinel/releases

java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server = localhost:8080 -Dproject.name = sentinel-dashboard -jar sentinel-dashboard-1.8.x.jar
0ed785886dc07ef9be7d3c4587393b1c.png
image.png

1、docker安装sentinel
docker pull bladex/sentinel-dashboard

2、启动镜像
docker run --name sentinel -d -p 8858:8858 -d bladex/sentinel-dashboard

3、开放端口
firewall-cmd --permanent --add-port=8858/tcp

4、登录:
http://192.168.1.58:8858/#/dashboard/flow/sentinel-dashboard
账号密码默认均为:sentinel

brew install redis

brew services restart redis

ps -ef|grep redis

7458be5952a8a5e0b8ae369048f7ecbc.png
image.png
cd /Users/xiaolige/app
## 创建 redis master 节点配置文件目录
mkdir -p redis/redisSentinel/master
## 创建 redis slave 节点配置文件目录
mkdir -p redis/redisSentinel/slave
## 创建 redis sentinel 节点配置文件目录
mkdir -p redis/redisSentinel/sentinel
## 创建 redis 启动相关脚本目录
mkdir -p redis/redisSentinel/script
## 创建 redis 日志目录
mkdir -p redis/redisSentinel/logs
a60b49e1d6fed703ddd32d8a42d5a0fb.png
image.png

把下载好的sentinel-dashboard-1.7.2.jar包上传到服务器/usr/local中
进入/usr/local目录启动

cd /usr/local

启动Sentinel

直接启动sentinel控制台

java -jar sentinel-dashboard-1.7.2.jar

后台进程方式启动

nohup java -jar sentinel-dashboard-1.7.2.jar >sentinel.log &

管理Sentinel

浏览器访问:http://localhost:8080

默认账号密码
账号:sentinel
密码:sentinel

nacos is starting with standalone

./startup.sh -m standalone

nacos is starting,you can check the /Users/jeskson/Downloads/nacos/logs/start.out

901948bcaf881c44b2e98618bb87c59c.png
image.png
9de79ab6d0f70311f1eb33c0215c0d45.png
image.png

Docker安装Sentinel(Mac)

java -jar sentinel-dashboard-1.8.6.jar

startup.cmd -m standalone

拉取依赖java:8-alpine镜像

docker pull java:8-alpine

创建Dockerfile

在目录 /Users/xxx/docker/sentinel(根据需要自定义) 下创建Dockerfile文件,并授权

sentinel % pwd /Users/luyou/docker/sentinel

sentinel % touch Dockerfile # 授权目录

chmod -R 777 sentinel

cd sentinel

将 sentinel-dashboard-1.8.4.jar 放入 /Users/xxx/docker/sentinel目录下

FROM java:8-alpine
COPY ./sentinel-dashboard-1.8.4.jar /tmp/sentinel-dashboard-1.8.4.jar
EXPOSE 8081 8719
ENTRYPOINT java -Dserver.port=8081 -Dcsp.sentinel.dashboard.server=localhost:8081 -Dproject.name=sentinel-dashboard -jar /tmp/sentinel-dashboard-1.8.4.jar

docker build . -t sentinel-dashboard:1.8.4

226b6ca77f985efb104273ae25da88a2.png

创建容器

docker run --name sentinel -p 8081:8081 -p 8719:8719 -d sentinel-dashboard:1.8.4

docker ps

docker start sentinel

f07ad46c55a8890b3b7fccb7e14b20be.png
image.png

docker stop sentinel

docker rm sentinel

docker logs -f sentinel

进入容器

docker exec -it sentinel bash

退出容器

exit

Docker安装Seata

Docker安装Nacos

Docker安装Mongodb

Docker安装RabbitMQ

java -jar sentinel-dashboard-1.8.6.jar

nslookup github.com 8.8.8.8

java -jar -Dserver.port=8080 sentinel-dashboard-1.8.6.jar

java -jar -Dserver.port=8718 sentinel-dashboard-1.8.6.jar

./startup.sh -m standalone

http://localhost:8848/nacos/#

8718

问题 异常提示:JWT signature does not match locally computed signature. JWT validity cannot be asserted and should not be trusted.

中文意思是:JWT签名与本地计算的签名不匹配。无法断言JWT有效性,不应信任JWT有效性。

解决 出现这种异常的情况有:

1、生成token时用的密钥和验签时用的密钥不一致。通过打断点的方式debug检查对比两个地方的密钥是否一致。

2、验签时使用的令牌不对。通过打断点的方式debug检查,生成的令牌和回传的令牌是否一致。

public static void addAuthentication(HttpServletResponse res, String username, String role) {
  String JWT = Jwts.builder()
    .setSubject(username)
    .setExpiration(new Date(System.currentTimeMillis() + EXPIRATIONTIME))
    .claim("roleName", role)
    .signWith(SignatureAlgorithm.HS512, SECRET)
    .compact();
  res.addHeader(HEADER_STRING, TOKEN_PREFIX + " " + JWT);
}
// parse the token.
Claims body = Jwts.parser()
  .setSigningKey(SECRET)
  .parseClaimsJws(token.replace(TOKEN_PREFIX, ""))
  .getBody();
String username = body.getSubject();
0e5af9da4660c4044b1b0d41f7607c3d.jpeg
image.png

加群联系作者vx:xiaoda0423

仓库地址:https://github.com/webVueBlog/JavaGuideInterview

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT及其工作原理;OpenAI申请注册商标GPT-5,引发关注

🦉 AI新闻 🚀 OpenAI申请注册商标GPT-5,引发关注 摘要:OpenAI已在上月18日申请注册商标GPT-5,显示该模型将提供文本生成、自然语言理解、语音转录、翻译、分析等功能。此前OpenAI曾表示尚未开始训练GPT-4的后继者GPT…

在 React 中渲染大型数据集的 3 种方法

随着 Web 应用程序变得越来越复杂,我们需要找到有效的方法来优化性能和渲染大型数据集。在 React 应用程序中处理大型数据集时,一次呈现所有数据可能会导致性能不佳和加载时间变慢。 虚拟化是一种通过一次仅呈现数据集的一部分来解决此问题的技术&#…

I.MX6ULL_Linux_驱动篇(41)platform设备驱动框架

我们在前面几章编写的设备驱动都非常的简单,都是对IO进行最简单的读写操作。像I2C、SPI、 LCD 等这些复杂外设的驱动就不能这么去写了, Linux 系统要考虑到驱动的可重用性,因此提出了驱动的分离与分层这样的软件思路,在这个思路下…

原型链污染,nodejs逃逸例子

文章目录 原型链污染原型链污染原理原型链污染小例子 原型链污染题目解析第一题第二题 Nodejs沙箱逃逸方法一方法二 原型链污染 原型链污染原理 原型链 function test(){this.a test; } b new test;可以看到b在实例化为test对象以后,就可以输出test类中的属性a…

用python做一个小项目,python做简单小项目

大家好,本文将围绕用python做一个小项目展开说明,python做简单小项目是一个很多人都想弄明白的事情,想搞清楚python入门小项目需要先了解以下几个事情。 来源丨网络 经常听到有朋友说,学习编程是一件非常枯燥无味的事情。其实&…

gitlab配置webhook

一.前言 当需要做jenkins的自动化触发构建时,就需要配置gitlab的webhook功能,以下来展示以下如何配置gitlab的webhook,jenkins的配置就不在这里展示了,可以去看我devops文章的完整配置 二.配置 在新版本的gitlab中&#xff0c…

JavaScript 手撕大厂面试题数组扁平化以及增加版本 plus

前言 现在的前端面试手撕题是一个必要环节,有点时候八股回答的不错但是手撕题没写出来就会让面试官印象分大减,很可能就挂了… 概念 数组的扁平化其实就是将一个多层嵌套的数组转换为只有一层的数组 比如: [1, [2, [3, [4, 5]]]] > [1…

高速公路巡检无人机,为何成为公路巡检的主流工具

随着无人机技术的不断发展,无人机越来越多地应用于各个领域。其中,在高速公路领域,高速公路巡检无人机已成为公路巡检的得力助手。高速公路巡检无人机之所以能够成为公路巡检中的主流工具,主要是因为其具备以下三大特性。 一、高速…

Android 之 MediaPlayer 播放音频与视频

本节引言: 本节带来的是Android多媒体中的——MediaPlayer,我们可以通过这个API来播放音频和视频 该类是Androd多媒体框架中的一个重要组件,通过该类,我们可以以最小的步骤来获取,解码 和播放音视频。它支持三种不同的…

PHP8的运算符-PHP8知识详解

运算符是可以通过给出的一或多个值(用编程行话来说,表达式)来产生另一个值(因而整个结构成为一个表达式)的东西。 PHP8的运算符有很多,按类型分有一元运算符、二元运算符、三元运算符。 一元运算符只对一…

第四讲:利用ADO方式连接Access数据库

【分享成果,随喜正能量】最值得信赖的,其实是自己从孤独中得来的东西,而不是别人给予自己的东西。每个人都是一座孤岛,有些人一生都在想要逃离这座岛,有些人一生都在创造并丰富自己这座岛。。 《VBA数据库解决方案》教…

解释器模式——自定义语言的实现

1、简介 1.1、文法规则和抽象语法树 解释器模式描述了如何为简单的语言定义一个文法,如何在该语言中表示一个句子,以及如何解释这些句子。在正式分析解释器模式结构之前,先来学习如何表示一个语言的文法规则以及如何构造一棵抽象语法树。 …

安全文件传输:如何避免数据泄露和黑客攻击

网络安全问题日益严重,导致许多数据被泄露和黑客袭击的事件频发。为了保证文件传输的安全,需要实施一系列安全文件传输策略来防止数据被泄露和黑客袭击。 第一、选择适合的加密方法是非常关键的 加密是一种将明文转换成密文的过程,这样只有授…

跨部门协作,企业图文档管理的协同管理的重要性

随着企业规模的扩大和业务流程的复杂化,图文档管理涉及的部门和人员越来越多,因此跨部门协作成为了必不可少的管理方式。在线图文档管理作为现代企业的数字化解决方案之一,为跨部门协作提供了强大的支持和便利。在线图文档管理在企业图文档管…

计算机视觉实验:图像增强应用实践

本次实验主要从基于统计、函数映射的图像增强方法和基于滤波的图像增强方法两种方法中对一些图像增强的算法进行实现。主要的编程语言为python,调用了python自带的PIL图像库用于读取图像,利用numpy进行图像运算,最后使用opencv第三方库进行对…

最新版Android13使用Notification,Notification的基本使用和进阶使用

一、使用Notification 1、创建一个通知 1.1 注册一个渠道 在Android13,版本通知的使用发生了新的变化。 首先我们需要创建一个NotificationManager用于管理通知。 //创建notificationManager对通知进行管理 NotificationManager notificationManager getSyste…

输入筛选框搜索

文章目录 输入筛选框实现效果图需求前端工具版本添加依赖main.js导入依赖 代码 后端代码对应 sql对应 mapper.xml 文件的动态 sql 输入筛选框实现 效果图 需求 通过筛选框,选择公司,传入后端,后端根据公司名称去文章的内容中进行模糊查询 …

【云原生】K8S二进制搭建上篇

目录 一、环境部署1.1操作系统初始化 二、部署etcd集群2.1 准备签发证书环境在 master01 节点上操作在 node01与02 节点上操作 三、部署docker引擎四、部署 Master 组件4.1在 master01 节点上操 五、部署Worker Node组件 一、环境部署 集群IP组件k8s集群master01192.168.243.1…

Linux lvs负载均衡

LVS 介绍: Linux Virtual Server(LVS)是一个基于Linux内核的开源软件项目,用于构建高性能、高可用性的服务器群集。LVS通过将客户端请求分发到一组后端服务器上的不同节点来实现负载均衡,从而提高系统的可扩展性和可…