编辑
2024-08-06
实用工具
00

概览

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。 官网

特性

1. 服务发现和服务健康监测

Nacos 支持基于 DNS 和基于 RPC 的服务发现。服务提供者使用 原生SDK、OpenAPI、或一个独立的Agent TODO注册 Service 后,服务消费者可以使用DNS TODO 或HTTP&API查找和发现服务。

Nacos 提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。Nacos 支持传输层 (PING 或 TCP)和应用层 (如 HTTP、MySQL、用户自定义)的健康检查。 对于复杂的云环境和网络拓扑环境中(如 VPC、边缘网络等)服务的健康检查,Nacos 提供了 agent 上报模式和服务端主动检测2种健康检查模式。Nacos 还提供了统一的健康检查仪表盘,帮助您根据健康状态管理服务的可用性及流量。

2. 动态配置服务

动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。

动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。

配置中心化管理让实现无状态服务变得更简单,让服务按需弹性扩展变得更容易。

Nacos 提供了一个简洁易用的UI (控制台样例 Demo) 帮助您管理所有的服务和应用的配置。Nacos 还提供包括配置版本跟踪、金丝雀发布、一键回滚配置以及客户端配置更新状态跟踪在内的一系列开箱即用的配置管理特性,帮助您更安全地在生产环境中管理配置变更和降低配置变更带来的风险。

3. 动态 DNS 服务

动态 DNS 服务支持权重路由,让您更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。动态DNS服务还能让您更容易地实现以 DNS 协议为基础的服务发现,以帮助您消除耦合到厂商私有服务发现 API 上的风险。

Nacos 提供了一些简单的 DNS APIs TODO 帮助您管理服务的关联域名和可用的 IP列表.

4. 服务及其元数据管理

Nacos 能让您从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据。

编辑
2024-08-01
实用工具
00

git简介

git是一个优秀的代码版本管理工具,其主要由三个部分组成:

  • 工作空间
  • 本地仓库(本地缓冲区)
  • 远程仓库
    程序员在本地IDE中编写的为工作空间。本地完成开发后准备提交远程仓库需要提交(cmmit)到本地仓库先。本地仓库会保存你每次对代码进行的改动,因此,你可以回退到指定commit来将你的代码恢复到某个状态。
    本地仓库保存的代码和变更历史保存在.git(Windows)文件夹中,因此误删可能会遗失。远程仓库可实现云上代码托管。提交到远程仓库必须经过本地仓库,无法从工作空间直接提交。

术语

  • 提交(Commit):提交是Git中最基本的操作之一,它表示对代码库的一个修改或一组修改的快照。每次提交都包含一个唯一的哈希值,以及作者、日期和提交消息等元数据。
  • 分支(Branch):分支是基于某个特定提交的可编辑的代码路径。主分支(通常是master或main)是项目的主要开发线,而其他分支可以用于开发新功能、修复错误或进行实验性工作。分支的合并(Merge)是将一个分支的更改合并到另一个分支的过程。
  • 远程仓库(Remote Repository):远程仓库是位于网络上的Git代码库,通常托管在服务提供商(如GitHub、GitLab或Bitbucket)上。开发者可以从远程仓库拉取(Pull)代码,也可以推送(Push)本地更改到远程仓库。
  • 工作区(Working Directory):工作区是指开发者正在编辑和修改文件的地方。Git监视工作区中的文件,并记录其中的更改。
  • 索引(Index):索引也称为暂存区(Staging Area),是一个缓冲区,用于准备提交的更改。在执行提交之前,开发者可以将要提交的更改添加到索引中。
  • 撤销更改(Undoing Changes):Git提供了多种方式来撤销更改,包括使用git reset命令回滚提交、使用git checkout命令恢复单个文件或文件夹的特定版本,以及使用git revert命令创建一个新的提交来撤销之前的更改。
  • 标签(Tag):标签是用于标记代码库中重要的版本或里程碑的指针。与分支不同,标签通常用于标识特定的提交,而不是用于开发新功能或进行更改。
编辑
2024-07-31
遇到的问题
00

单个yml文件

application.yml或者bootstrap.yml

java
@RunWith(SpringRunner.class) @SpringBootTest public class ClientTest { }

多个yml文件

  • application.yml
  • application-dev.yml
  • application-local.yml

或者

  • bootstrap.yml
  • bootstrap-dev.yml
  • bootstrap-local.yml
java
//指定local文件的配置 @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, properties = {"spring.profiles.active=local"}) public class ClientTest { }
编辑
2024-07-22
实用工具
00

Java_webSocket实现

依赖引入

xml
<dependency> <groupId>org.java-websocket</groupId> <artifactId>Java-WebSocket</artifactId> <version>1.5.3</version> <!-- 使用最新版本 --> </dependency>

配置类

目的是项目启动的时候自动去连接webSocket地址

java
import com.lhw.WsRobClient; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.socket.server.standard.ServerEndpointExporter; import java.net.URI; import java.net.URISyntaxException; @Configuration public class WebSocketConfig { @Value("${websocket.url}") private String url; @Bean public WsRobClient wsClient() throws URISyntaxException { WsRobClient client=new WsRobClient(new URI(url)); client.connect(); return client; } }
编辑
2024-07-22
实用工具
00

介绍

WebSocketServer的目的是为了实时推送数据到客户端,才使用webSocket的双全工的方式

spring简单实现有两种方式

  1. WebSocketConfigurer接口
  2. 通过@ServerEndpoint注解配合ServerEndpointExporter bean来配置WebSocket端点

优缺点

在Spring框架中配置WebSocket服务器时,您可以选择使用WebSocketConfigurer接口或者通过@ServerEndpoint注解配合ServerEndpointExporter bean来配置WebSocket端点。这两种方式各有优缺点,适用于不同的场景。

使用WebSocketConfigurer接口

优点:

  • 集成度更高: 与Spring框架的集成更加紧密,可以充分利用Spring的依赖注入、AOP等特性。
  • 配置灵活: 可以通过WebSocketHandlerRegistry注册多个处理器,并且可以配置拦截器、异常处理器等。
  • 支持Spring Security: 可以更容易地与Spring Security集成,实现WebSocket层的安全控制。

缺点:

学习曲线: 需要熟悉Spring WebSocket的配置和使用方式。

使用@ServerEndpoint注解和ServerEndpointExporter

优点:

  • 简单直接: 配置相对简单,适合快速开发和小型项目。
  • 标准支持: @ServerEndpoint是Java EE WebSocket API的一部分,因此具有更好的跨平台兼容性(尽管在Spring环境中使用时,通常还是会依赖Spring的一些特性)。

缺点:

  • 集成度较低: 与Spring框架的集成不如WebSocketConfigurer紧密,依赖注入等特性需要额外配置或使用其他手段实现。
  • 配置不够灵活: 相比WebSocketConfigurer,配置选项较少,例如不能方便地添加拦截器或异常处理器。
  • 安全性: 需要手动配置WebSocket层的安全控制,与Spring Security的集成不如WebSocketConfigurer方便。
  • 结论
  • 对于大多数Spring项目来说,使用WebSocketConfigurer接口是更好的选择。它提供了更高的集成度和更灵活的配置选项,可以充分利用Spring框架的优势。同时,随着Spring框架的不断发展和完善,WebSocketConfigurer接口也可能会得到更多的功能和优化。

然而,如果您的项目比较简单,或者您更熟悉Java EE WebSocket API的标准实现方式,并且不需要与Spring框架进行深度集成,那么使用@ServerEndpoint注解和ServerEndpointExporter也是一种可行的选择。

实现

引入spring-websocket依赖

springBoot项目需要引入spring的webSocket依赖

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency>

1.ServerEndpoint注解和ServerEndpointExporter

配置类

java
@Configuration public class WebSocketConfig { @Bean public ServerEndpointExporter serverEndpointExporter(){ return new ServerEndpointExporter(); } }