首页 文章 精选 留言 我的

精选列表

搜索[服务],共10000篇文章
优秀的个人博客,低调大师

Java HeartBeat 3.0.0 发布,心跳检测各类服务 (支持 HTTP/UDP/TCP) 应用

Java HeartBeat 3.0.0 版本已经发布,带来Socket监控支持(TCP/UDP)。 3.0.0 版本主要更新如下: 添加Socket (TCP,UDP)的监控 升级JDK, SpringBoot等基础版本, log升级使用logback框架, thymeleaf替换jsp 各实例提供分组与查询 邮件配置界面化,更灵活(不在配置文件中写固定) 提醒方式增加钉钉机器人(相比邮件即时性更好) 优化界面部分UI,更直观简洁 HeartBeat 3.0.0 版本访问地址:https://gitee.com/mkk/HeartBeat/tree/3.0.0/

优秀的个人博客,低调大师

Monibuca v4.7.2 发布 —— 开源 go 语言流媒体服务

发布摘要 新增av1和opus轨道类型 支持接受OBS 30.0+的WHIP(webrtc)推流,(h264+opus) 支持ffmpeg 6.1+以及OBS通过rtmp扩展协议的h265以及av1推拉流 修复若干bug 引擎和插件版本 engine v4.14.3 hls v4.3.7 hdl v4.1.10 rtsp v4.3.3 rtmp v4.2.9 webrtc v4.2.3 record v4.4.5 ps v4.1.4 详细说明 使用OBS的WHIP推流 OBS 30.0正式支持WHIP推流方式,因此需要先安装OBS 30.0以上版本。 OBS配置 注意事项 OBS目前只支持udp推流方式,因此需要配置webrtc插件为udp端口方式。 webrtc: port:udp:9000-10000 OBS目前音频轨道在WHIP中只能使用opus编码。由于rtmp协议不支持opus编码格式,因此在播放含有opus编码的流的时候,只能使用webrtc方式,或者rtsp协议。 使用OBS推送av1视频 OBS的av1格式可以通过rtmp扩展协议推送 OBS配置 经过测试如果关键帧间隔设置为0,会导致只有开头有关键帧,因此这里可以设置为1s。 ffmpeg推送h265/av1 ffmpeg 6.1以上支持rtmp扩展协议,下面是命令行示例(其中xxx代表视频源,即视频文件地址或者远程流地址) ffmpeg-ixxx-c:vh265-c:aaac-fflvrtmp://localhost/live/test ffmpeg-ixxx-c:vav1-c:aaac-fflvrtmp://localhost/live/test 播放av1视频 通过OBS、ffmpeg 6.1推送后,目前支持的播放方式: webrtc ffplay 6.1以上通过rtmp/rtsp协议播放

优秀的个人博客,低调大师

袋鼠云代码检查服务,揭秘高质量代码背后的秘密

质量是产品的生命线,代码检查是软件开发过程中至关重要的一环,它可以帮助我们发现并纠正潜在的错误,提高软件质量,降低维护成本。 在袋鼠云产品中也存在这个问题,由于离线数据开发人员 SQL 水平不一,导致代码书写混乱、SQL 代码运行问题较多。本文将介绍在离线产品中如何利用 SQL 检查规则规范化 SQL 代码,对代码书写问题进行拦截,便于统一管理,用于预防引入需要治理的问题。 通过本文的介绍,我们希望您能够认识到代码检查的重要性,并了解如何通过最佳实践来提高代码质量和开发效率。 何时进行代码规则检查? SQL 任务在离线产品界面开发完成之后,点击运行的按钮,会先经过代码规则检查,如果代码规则不满足则会提示到用户具体的原因。 数据资产模块内置了 5 种代码检查规则,用户可以根据需要选择性开启。 开启后在离线项目管理中可以选择使用的代码规则检查项、生效范围和 SQL 任务类型。 在离线 SQL 任务中去运行一条 SQL 前会根据选择的规则先进行代码检查,如果代码检查不通过则会反馈给用户,用户可以根据实际需要判断要不要执行该 SQL。 在数据资产的代码检查时间中可以看到已经触发的检查历史以及相应的统计数据。 如何实现代码检查规则? 在 CodeCheck 包下定义了通用的代码规则检查的接口。 public interface ICheck { Result codeCheck(String checkContent, String defaultDb, Integer dataSourceType, Long tenantId, SqlParseInfo sqlParseInfo); CodeCheckType getCheckType(); } 以分区表查询必须带分区规则为例,会先调用 SQLParser 组件进行 SQL 解析,SQLParseInfo 即为 SQL 解析结果,检查时会先判断 SQL 语句是不是查询语句,如果是则判断查询的表是不是分区表,再判断是否有查询条件,最后判断查询条件中是否包含分区字段来判断是否检查通过。 public class CodeCheckImplType01 extends AbstractCheck { private static final Logger LOGGER = LoggerFactory.getLogger(CodeCheckImplType01.class); @Autowired private DataTableColumnThirdService dataTableColumnThirdService; @Autowired private DataTableThirdService dataTableThirdService; @Override public Result codeCheck(String checkContent, String defaultDb, Integer dataSourceType, Long tenantId, SqlParseInfo sqlParseInfo) { if (!isQuery(sqlParseInfo.getSqlType())) { return Result.buildSuccessResult(); } try { MetadataSearchParam searchParam = new MetadataSearchParam(); searchParam.setDbName(sqlParseInfo.getMainTable().getDb()); searchParam.setTableName(sqlParseInfo.getMainTable().getName()); searchParam.setDataSourceType(dataSourceType); searchParam.setTenantId(tenantId); List<TableDTO> tableDTOS = dataTableThirdService.tableList(searchParam); // 获取表信息 for (TableDTO tableDTO : tableDTOS) { List<DataTableColumn> tableColumns = dataTableColumnThirdService.listColumnByTableIds(Lists.newArrayList(tableDTO.getTableId())); if (CollectionUtils.isEmpty(tableColumns)) { continue; } List<String> partitionColumnNameList = tableColumns.stream() .filter(Objects::nonNull) .filter(t -> HavePartitionEnum.have_partition.getPartitionValue().equals(t.getIsPartition())) .map(DataTableColumn::getColumnName) .collect(Collectors.toList()); // 非分区表直接返回 if (CollectionUtils.isEmpty(partitionColumnNameList)) { continue; } if (CollectionUtils.isEmpty(sqlParseInfo.getColumnIdentifierList())) { // 没有查询条件则校验失败 return Result.buildFailedResult(String.format(getCheckType().getCheckResultFormat(), searchParam.getTableName())); } List<String> columnList = sqlParseInfo.getColumnIdentifierList().stream() .filter(c -> StringUtils.equals(c.getDb(), searchParam.getSchemaName()) && StringUtils.equals(c.getTable(), searchParam.getTableName())) .map(ColumnIdentifier::getColumn).collect(Collectors.toList()); boolean disjoint = Collections.disjoint(partitionColumnNameList, columnList); if (disjoint) { return Result.buildFailedResult(String.format(getCheckType().getCheckResultFormat(), searchParam.getTableName())); } } } catch (Exception e) { // 异常情况先通过 LOGGER.error("code check error, check content: {}, defaultDb: {}, checkType: {}", checkContent, defaultDb, getCheckType().name()); } return Result.buildSuccessResult(); } @Override public CodeCheckType getCheckType() { return CodeCheckType.TYPE_01; } } 如何自定义代码检查规则? 如果内置的代码检查规则不满足客户的使用场景,客户可以通过上传 jar 的方式自定义代码检查规则。 自定义代码检查规则使用 SPI 机制加载用户上传的自定义 jar,并在代码检测时调用 CodeCheck 方法,在资源关闭时调用 close 方法,用户需要将配置文件说明中的 jar 依赖自己的项目中。具体如下: ● 创建一个类实现接口 创建一个类实现接口 com.dtstack.assets.spi.codecheck.ICodeCheckClient 并实现 CodeCheck 和 close 方法,书写相关逻辑代码,如果校验通过需要将 CheckResult 对象中 success 设置为 true,失败时设置 success 字段为 false 并设置校验不通过的理由。 package com.dtstack.assets.spi.codecheck; import java.util.Map; public interface ICodeCheckClient { /** * 代码检查 * * @param checkContent 检查内容 * @param extMap 扩展配置 * @return 检查结果 */ CheckResult codeCheck(String checkContent, Map<String, Object> extMap); /** * 释放资源, 调用时需要关闭所使用的资源 */ void close(); } · 入参字段解释 – checkContent 为单条 SQL 信息 – extMap 会设置一些平台的属性,包含任务名称、任务类型等 · 出参字段解释 – success 为是否校验通过,必须设置 – checkResult 为校验结果,校验不通过时不能为空 package com.dtstack.demo; import com.dtstack.assets.spi.codecheck.CheckResult; import java.util.Map; public class CodeCheckImpl implements com.dtstack.assets.spi.codecheck.ICodeCheckClient{ @Override public CheckResult codeCheck(String checkContent, Map<String, Object> extMap) { // 代码检查相关逻辑 CheckResult checkResult = new CheckResult(); checkResult.setSuccess(false); checkResult.setCheckResult("校验不通过的理由"); return checkResult; } @Override public void close() { // 关闭相关资源 } } ● 在 resource 目录下创建 META-INF/services 目录 ● 在 META-INF/services 目录下创建文件 文件名称为 com.dtstack.assets.spi.codecheck.ICodeCheckClient ,文件内容为实现 ICodeCheckClient 接口类的权限定类名。 文件名称和内容示例: ● 打包当前工程并在数据资产页面注册代码校验规则 不符合条件的 jar 会给出提示。 如何加载自定义代码规则对应的 jar ? 我们会为上传的每个规则对应的 jar 初始化一个唯一的自定义 classloader,该 classloader 继承 URLClassLoader 并保证子类加载器优先加载。 在第一次调用时进行加载并缓存对应的 client。 在用户重新上传或者编辑规则后清除旧的 classloader 和加载的 client 并释放资源。 《数栈产品白皮书》:https://www.dtstack.com/resources/1004?src=szsm 《数据治理行业实践白皮书》下载地址:https://www.dtstack.com/resources/1001?src=szsm 想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:https://www.dtstack.com/?src=szkyzg 同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术qun」,交流最新开源技术信息,qun号码:30537511,项目地址:https://github.com/DTStack

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册