Tips
未读如何实时获取设备的延迟今天了解到一个功能,如何获取一个设备延迟,并加以监控。搜索了一下资源,大概了解可以通过两个方式获取。
Ping请求+Springboot定时任务
Http请求+Springboot定时任务
前提:实时获取设备延迟的前提是目标设备必须在线且可通过网络访问(支持ICMP或HTTP/HTTPS等协议),并且你拥有必要的访问权限。设备和本地网络应允许Ping或HTTP请求,并确保网络环境稳定、时间同步准确。
1. 测试Ping和HTTP获取设备延迟
1.1 使用Ping测试12345678910111213141516171819202122import java.net.InetAddress;public class PingTest { public static void main(String[] args) { while (true) { try { String ipAddress = "camelliaxiaohua.o ...
Tips
未读thymeleaf模板
Thymeleaf 是一种现代化的 Java 模板引擎,主要用于在 web 应用中生成动态 HTML 内容。
1. thymeleaf的使用方法
1.1 引入thymeleaf依赖
maven
1234<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId></dependency>
在此之前需要引入spring-boot-starter-web
1.2 创建 Thymeleaf 模板Thymeleaf 模板文件通常放置在 src/main/resources/templates 目录下,文件格式为 .html。
1234567891011121314151617181920<!DOCTYPE html><html xmlns:th="http://www.thymeleaf.or ...
Tips
未读Java获取资源路径
在 Java 中,获取资源文件的路径可以通过以下几种方式实现,具体方法取决于资源的存放位置和环境:
1. 获取方式
1.1 ClassLoader.getResource()
使用类加载器来获取资源的路径,资源需要存放在类路径(通常是 src/main/resources)下。返回的是 URL 对象。
123456789@Testvoid getPathByClassPathResource(){ // 使用类加载器资源的URL URL url = getClass().getClassLoader().getResource("static/font/simsun.ttc"); // 获取资源的路径 String path = url.getPath(); // 使用类加载器来获取资源的路径并打印出来 System.out.println("类加载器来获取资源的路径: "+path);}
1.2 Class.getResource()
使用类对象获取资源路 ...
Java SE
未读Lambda表达式的方法引用
方法引用其实就是把一个已经存在的方法拿来用,不需要再写一遍代码。可以理解为:“别写重复的东西,直接拿来用”。比如,如果你要做一件事情,而某个方法已经写好了,那你就直接用它的名字就行,不用再写一个lambda表达式。
静态方法引用想象你要把列表里的每个数字都打印出来,原来你可能会这样写:
1list.forEach(n -> System.out.println(n));
这其实就是每次把n传到System.out.println()方法里。但println这个方法已经存在了,你可以直接用它的名字,像这样:
1list.forEach(System.out::println);
这样代码就更简洁了!不需要重复地写n ->了,因为Java知道要用println这个方法。
实例方法引用假设你有一个对象apple,它有一个方法叫eat()。原来你可能会这么写:
1list.forEach(item -> apple.eat(item));
但其实apple.eat()已经写好了,所以你可以这样直接引用:
1list.forEach(apple ...
Java SE
未读Lambda表达式的使用
1. Lambda表达式的语法
Lambda表达式本质就是一个匿名函数,在函数的语法中包含返回值类型、方法名、形参列表和方法体等,而在Lambda表达式中我们只需要关心形参列表和方法体即可。在Java语言中,Lambda表达式的语法为“(形参列表) -> {方法体}”,其中“->”为 lambda操作符或箭头操作符,“形参列表”为对应接口实现类中重写方法的形参列表,“方法体”为对应接口实现类中重写方法的方法体。
[!tip]
因为函数接口中只有一个方法,所以方法名和返回值类型可以省略。
以匿名内部类为例,从而将匿名内部类演化为Lambda表达式
匿名类
12345678List<Integer> list = Arrays.asList(3, 6, 1, 7, 2, 5, 4);Collections.sort(list, new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { ...
Java SE
未读初始Lambda表达式
1. Lambda表达式的引入
Lambda表达式是JDK1.8的一个新特性,可以取代大部分的匿名内部类,以便写出更优雅的Java代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。
例如想要实现对List集合的“降序”排序操作,就需要使用匿名内部类来实现,这样的代码非常的复杂和繁琐,如下:
123456789// 方式一:使用匿名内部类来实现List<Integer> list = Arrays.asList(3, 6, 1, 7, 2, 5, 4);Collections.sort(list, new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o2 - o1; }});System.out.println("排序后:" + list);
针对以上对List集合的的“降序”排序操作,除了使用匿名内部类来 ...
SpringCloud
未读Gateway服务网关
Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,基于 Spring 5.0、Spring Boot 2.0 和 Project Reactor 等响应式编程和事件流技术开发的网关。它旨在为微服务架构提供一种简单有效的统一 API 路由管理方式。Spring Cloud Gateway 提供了动态路由、过滤器和负载均衡等功能,使得微服务间的通信更加高效和安全。它可以轻松集成各种微服务,并提供统一的入口,简化了微服务的管理和监控。Spring Cloud Gateway 的设计使其具备高扩展性和高可用性,能够满足大规模微服务架构的需求。
1. 为什么需要网关Gateway网关是我们服务的守门神,所有微服务的统一入口。
1.1 网关的核心功能特性
权限控制:网关作为微服务入口,需要校验用户是是否有请求资格,如果没有则进行拦截。
统一入口:网关作为所有客户端请求的单一入口点,简化了客户端与后端服务的交互,隐藏了内部服务的复杂性,提供了一个统一的访问接口。
路由:网关负责将请求路由到正确的后端服务。根据请求的 URL、HTTP ...
Feign远程调用
先前利用RestTemplate发起远程调用的代码:
存在下面的问题:
代码可读性差,编程体验不统一
参数复杂URL难以维护
Feign是一个声明式的http客户端,其作用就是帮助我们优雅的实现http请求的发送,解决上面提到的问题。
1. Feign替代RestTemplate
1.1 引入依赖在order-service服务的pom文件中引入feign的依赖:
12345<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>${spring-cloud-starter-openfeign}</version></dependency>
1.2 添加注解在order-service的启动类添加注解开启Feign的功能:
...
Nacos配置管理
Nacos 不仅可以作为服务注册中心,还可以用作配置管理。Nacos 提供了一个集中的配置管理系统,允许您动态地管理应用程序的配置。
1. 统一配置管理
当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我们需要一种统一配置管理方案,可以集中管理所有实例的配置。
Nacos一方面可以将配置集中管理,另一方可以在配置变更时,及时通知微服务,实现配置的热更新。
1.1 在nacos中添加配置文件如何在nacos中管理配置呢?
然后在弹出的表单中,填写配置信息:
注意:项目的核心配置,需要热更新的配置才有放到nacos管理的必要。基本不会变更的一些配置还是保存在微服务本地比较好。
1.2 从微服务拉取配置微服务要拉取nacos中管理的配置,并且与本地的application.yml配置合并,才能完成项目启动。
但如果尚未读取application.yml,又如何得知nacos地址呢?
因此spring引入了一种新的配置文件:bootstrap.yaml文件,会在application.yml之前被读取,流程如下 ...
Nacos集群搭建
1. 集群结构图官方给出的Nacos集群图:
其中包含3个nacos节点,然后一个负载均衡器代理3个Nacos。这里负载均衡器可以使用nginx。
计划的集群结构:
三个nacos节点的地址:
节点
ip
port
nacos1
192.168.80.1
8845
nacos2
192.168.80.1
8848
nacos3
192.168.80.1
9956
2. 搭建集群
搭建集群的基本步骤:
搭建数据库,初始化数据库表结构
下载nacos安装包
配置nacos
启动nacos集群
nginx反向代理
2.1 初始化数据库Nacos默认数据存储在内嵌数据库Derby中,不属于生产可用的数据库。
官方推荐的最佳实践是使用带有主从的高可用数据库集群,这里采用单点的数据库。
2.2 配置Nacos将这个包解压到任意非中文目录下,如图:
目录说明:
bin:启动脚本
conf:配置文件
进入nacos的conf目录,修改配置文件cluster.conf.example,重命名为cluster.conf:
然后添加内容:
...