首页 文章 精选 留言 我的

精选列表

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

Logstash 7.5.2 发布,开源服务端数据处理流程

Logstash 是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到你最喜欢的“存储库”中。目前,Logstash 7.5.2已正式发布,该版本更新内容如下: Logstash 7.5.1 发行说明 修复:Java Execution -通过将类缓存从 ComputeStepSyntaxElement 移到 CompiledPipeline,提高 Logstash 启动时间 #11490 修复:Java Execution -通过仅在所有 WorkerLoops 都完全初始化后才启动,避免在过滤器和输出编译未完成时启动输入#11492 修复:通过使 get_thread_id 为“nil safe”来避免nil本机线程出现问题#11458 更新 JrJackson 和Jackson依赖项#11478 Pluginsedit Beats Input 更新了 Netty 依赖性,并删除了对不安全的 CBC 密码的支持 #376 更新了 Jackson 依赖 #375 File Input 修复: exclude 处理中的回归。 模式与文件名而不是完整路径匹配。#237 发布说明 下载地址

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

JeeSite V4.1.8 发布,BPM 业务流程模块发布

新增 新增 BPM 模块,基于 Flowable(Activiti)工作流引擎,详情:https://jeesite.gitee.io/docs/bpm/ 新增更多查询选项窗口(高级查询)不常用的查询折叠起来,详见:用户管理的查询 新增 session.sessionIdParamName 参数,替代更改 __sid 参数或 header 的名字 新增导航菜单 “全部显示在顶部”,详见演示:http://demo.jeesite.com 新增 2 个黑色配色主题,界面优化,登录页增加欢迎语 新增 sqlMap.updateNullValue() 执行更新时不去验证字段是否为空(相当于 isUpdateForce 的全局设置) 新增国际化了一些系统内置功能:二级管理员、系统管理员、租户管理员、角色管理、菜单管理、模块管理、参数配置、字典管理、消息推送、国际化管理、作业监控、缓存监控、服务器监控 新增 beetl toBoolean、toInteger 函数,简化调用;此项升级注意:一定要同步更新beetl-core.properties文件 新增 TreeService.updateStatus(entity, cascadeChild) 方法,支持级联更新下级状态 新增 isQuick 样式类,下拉框(change)后直接进行查询操作,省去点击查询按钮再查询 新增连接池 jdbc.pool.keepAlive 参数,详见 application.yml 文件 新增 Global.updateProperty 方法,将更新属性值,写入到配置文件 用户管理新增员工工号字典,并保持租户内唯一性验证;employee 新增 getByEmpNo 方法,cloud版升级注意 消息推送 BaseMsgContent 新增 bulidReceiveCode方法,方便开发者在扩展消息类型的时候,通过 userCode 获取 receiveCode 等信息接口。receiveCode 为实际的接受者数据,如:发送短信,则receiveCode是手机号 授权类增加 multiAddrLoginCheck 和 doGetAuthorizationInfo 的一些回调方法,方便扩展 新增 shiro.accessControlAllowMethods 和 shiro.accessControlAllowHeaders 允许跨域接入的方法和请求头 新增 mybatis 自定义属性 @Bean(“mybatisProperties”) 注入 Bean 即可,方便用户自定义属性 新增表名和字段名加 “前缀和后缀”、“是否强制大写” 的参数,特殊情况下使用 新增可编辑数据表格的JSON数据获取实例,详见:demoDataGridEditGrid.html QueryType 新增 NOT_LIKE、LEFT_NOT_LIKE、RIGHT_NOT_LIKE 查询类型 RoleUtils 新增 get(roleCode) 方法,并支持缓存 logincontroller 增加 切换角色身份示例 优化 优化字典缓存。减少缓存一次性返回的数据 优化字典分类查询,非超级管理默认查询非系统字典 优化 dataGrid 表头文字过长时支持自动换行 微软的 sqlserver 驱动,代码生成兼容性改进 升级 sql 脚本执行工具类,支持 \n 并忽略、注释行 bin 下的脚本优化,执行完成后增加 msg 对话框提醒 默认数据源接口优化,个性化数据源更强,更方便 TabPanel 找不到当前tab的时候,忽略异常信息 jqgrid 复选框列增加 cb 样式类,去掉省略号样式 超小屏幕的体验优化,方便弹出菜单,点击菜单自动最大化内容窗口 disableAutoAddStatusWhere 简化操作,省去 setStatus(“”) 的代码 请标准化json/xml等页面的Content-Type响应头,去掉AcceptCharset响应头 #I155OX $.validator.messages.errorMessage 设置为空不输出全局错误信息 不建议使用 CacheUtils.put(key, value, timeToLiveInSeconds) 方法,因为 sysCache 启动系统时过早的加载了 j2cache.properties 里的默认配置,所以这里不需要设置 timeToLiveInSeconds 这个参数,否则会提示 TTL 不正确。若自定义缓存名字,请使用 CacheUtils.put(cacheName, key, value, timeToLiveInSeconds) 方法 job 目标字符串支持使用双引号标识字符串,字符串中含逗号的不用再转义了,允许 bean 类型的参数为空 job 监听器支持自定义扩展,通过 jobService.getScheduler().getListenerManager() 获取监听管理器 优化切换系统菜单小于1个的时候不展示,所有人都可以切换系统。 初始化用户密码后或启用用户后清理登录验证失败数据 员工附属机构允许相同部门不同岗位 日志查询表单异常信息查看界面优化 部分工具类健壮代码,减少报错率 修正 修正代码生成 pg 数据库分区表查询不到问题 修正导入用户没有同步保存用户角色权限数据的问题 修正 pc 端,定时消息未推送的,缺显示在了未读消息列表里的问题 修正 fileupload 新上传的文件,索引号错位,点击下载按钮弹出删除框问题 修正 filemanager findList 修改了表前缀的时候,查询语句未加表前缀变量问题 v4.x 所有版本的 shiro 版本漏洞统一升级及改进,也可通过 RememberMeKeyGen 生成密钥 修正 mybatis weight 覆写时,偶尔会出现 ProviderSqlSource to DynamicSqlSource 错误(修复版本:4.1.3+) 修正登录页面,浏览器使用自动完成功能时,首次点击会提示账号不能为空问题 修正 dataGrid 空数据提醒 emptyDataHint 重复显示的问题 修正 select2 搜索框时,点击 2 次重置按钮才能还原问题 修正文件管理在多租户的情况,无分类的文件未区分租户问题 修正用户管理,先 reset,再赋值,会导致 isReset 的控件被清空问题 修正 log.enabled 关闭日志的时候没有关闭登录和退出日志记录的问题 修正 linux 下 ueditor 的图片预览列表的地址不对问题 修正当启用 CAS 并会话失效后,ajax 调用接口返回 404 的问题 修正代码生成模板的树表情况下,非字符串类型的查询条件错误 修正有时候删除作业计划后重启又恢复的问题 升级方法 修改web项目pom.xml文件中的jeesite-parent版本号为4.1.8-SNAPSHOT 如果你导入了jeesite-module-common源码项目,请与git上的代码进行同步 如果你导入了jeesite-module-core源码项目,请与git上的代码进行同步 模板引擎 Beetl 新增了几个方法,同步更新最新的 beetl-core.properties文件 默认关闭了,menu.updateStatusByModuleStatus=false,若使用请开启 了解更多: 在线文档:http://docs.jeesite.com 相关链接 JeeSite 的详细介绍:点击查看 JeeSite 的下载地址:点击下载

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

Logstash 7.5.1 发布,开源服务端数据处理流程

Logstash 是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到你最喜欢的“存储库”中。目前,Logstash 7.5.1已正式发布,该版本更新内容如下: Logstash 7.5.1 发行说明 通过包含相关 DLQ 的路径来提高报告完整 DLQ 时日志消息的实用性#11280 修复:消除了管道引用通过脱机插件包安装的基于Java的插件时管道启动时可能发生的崩溃#11340 修复:常见的 remove_field 插件选项现在可以在@metadata字段上正常工作#11342 修复:不要将 ThreadContext 泄漏到系统中#11356 修复:消除了 7.2.0 中引入的回归#11401 修复:使用空的 kibana 零件处理cloud-id#11435 patch release的 bump依赖#11438 Plugins Dns Filter 添加了有关 nameserver 选项的文档,该文档依赖于 /etc/resolv.conf 来配置解析器 Elasticsearch Filter 放松对 Elasticsearch gem 的限制#120 Grok Filter 在多匹配方案中改进了 grok 过滤器性能。#153 Jdbc_static Filter 解决了使用 Java 11 进行驱动程序验证的问题#51 ...... 更多详细信息可查看发行说明 下载地址:https://www.elastic.co/cn/downloads/logstash

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

Logstash 7.5.0 发布,开源服务端数据处理流程

Logstash 是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到你最喜欢的“存储库”中。目前,Logstash 7.5.0已正式发布,该版本更新内容如下: Logstash 7.5.0发行说明 为多个管道提供所有设置#11076 在 Pipelines.yml 文件中支持替换#11081 每个管道提供日志附加程序#11108 在 OpenSSL 套接字规范中使用 2048 位密钥#11115 添加管道配置的来源#11123 从 log4j2.properties中删除 10k 字符截断#11206 如果 Java 运行时小于 11,则从系统属性中删除#11225修复#11221 [DOC] 将 metricbeat 添加为监视选项#11190 Plugins Kafka Integration Kafka 集成插件的初始版本(将以前分开的 Kafka 插件和共享的依赖项组合到单个代码库中) Rabbitmq Integration RabbitMQ 集成插件的初始版本(将以前分开的 RabbitMQ 插件和共享的依赖项组合到单个代码库中) Elasticsearch Output 修复了文档中的措辞和更正的选项#881#883 弃用:添加了有关将 Logstash 的默认发行版与 OSS 版本的 ES 连接的警告#875 添加了用于连接到 ES 8.x 的模板#871 添加了对 ES 8.x 的 sniffing 支持#878 详细信息:https://www.elastic.co/guide/en/logstash/7.5/logstash-7-5-0.html 下载地址:https://www.elastic.co/cn/downloads/logstash

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

阿里巴巴小程序繁星计划活动补贴申领流程

阿里巴巴小程序繁星计划补贴活动正式开启,使用阿里云开发支付宝小程序,新增小程序首月活>=100,即可获得100元阿里云无门槛代金券。想要入驻阿里巴巴小程序繁星计划的合作伙伴,具体操作步骤如下: 步骤一:申请阿里巴巴小程序繁星计划合作伙伴 1). 打开阿里巴巴小程序繁星计划活动页,申请加入繁星计划。 2). 在用户类型中选择小程序合作伙伴。 3). 完成申请人信息的填写,并点击提交。 步骤二:入驻支付宝服务市场 1). 打开支付宝开放平台,选择立即入驻。 2). 选择扫码登陆或者账密登录。 3).完成入驻身份的填写,并点击提交入驻申请。 步骤三:入驻完成后,合作伙伴通过支付宝服务市场发布小程序应用即可享受扶持领取代金券。建议使用小程序serverless,现在是免费的哦~ 温馨提示:获得的代金券将在1月发放到阿里云账户中。 想要了解更多活动详细说明

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

Flink1.9 Create table 语句转换 为 Operation流程分析

本文主要描述 Flink1.9 新提供的 create table sql 通过 Calcite 解析,校验 并注册到catalog的过程。样例SQL: CREATE TABLE user_log ( user_id VARCHAR, item_id VARCHAR, category_id VARCHAR, behavior VARCHAR, ts TIMESTAMP ) WITH ( 'connector.type' = 'kafka', -- 使用 kafka connector 'connector.version' = 'universal', -- kafka 版本,universal 支持 0.11 以上的版本 'connector.topic' = 'xc_user_behavior', -- kafka topic 'connector.startup-mode' = 'earliest-offset', -- 从起始 offset 开始读取 'connector.properties.0.key' = 'zookeeper.connect', -- 连接信息 'connector.properties.0.value' = '172.16.8.107:2181', 'connector.properties.1.key' = 'bootstrap.servers', 'connector.properties.1.value' = '172.16.8.107:9092', 'update-mode' = 'append', 'format.type' = 'json', -- 数据源格式为 json 'format.derive-schema' = 'true' -- 从 DDL schema 确定 json 解析规则 ) 带着两个疑问:1:如何自定义create table 语法(之后会另外写一篇), 2:create table 的表信息是如何注册到catalog上的,供之后的select 语句查询; 一:StreamTableEnvironment.create() 关注:Planner 的初始化 实例化一个CatalogManager(元数据管理器) --初始化一个GenericInMemroyCatalog作为默认的Catalog 实例化StreamPlanner(本文以流作为背景,所以实例化目标为StreamPlanner) 初始化StreamPlanner继承的超类PlannerContext 可以看到提供了统一生成Calcite FrameworkConfig的函数createFrameworkConfig,关注其中对defaultSchema的设置,(之前实例的CatalogManager的包装类CatalogManagerCalciteSchema作为默认的Schema),另外ParserFactory参数也需要关注下,FlinkSqlParserImpl.FACTORY 这个是flink 基于Calcite 扩展的支持DDL的解析类; 初始化查询优化器: RelOptPlanner planner = new VolcanoPlanner(frameworkConfig.getCostFactory(), frameworkConfig.getContext());//基于cost的优化器 到这一步Planner环境初始化相关的操作已经完成。 二:解析Create table Sql语句:StreamTableEnvironment.sqlUpdate(createSqlStr) StreamTableEnvironment 调用 之前初始化环境过程中创建的 StreamPlanner 解析create table 语句 生成 CreateTableOperation; 其中生成Operation 的部分主体是: 生成Planner PlannerContext基于统一提供的createFrameworkConfig() 生成FlinkPlannerImpl。 FlinkPlannerImpl 解析 DDL语句 生成SqlNode(如何根据Calcite自定义Table create 这个会后会另外单独写一篇)。 调用validate() 对create table 信息进行校验, 包括table 的column, primaryKeys,uniqueKeys,partitionKey设置是否正确,这个校验不包括对create table 语法的校验,create 语法的校验在parse阶段已经处理过; org.apache.flink.table.planner.operations.SqlToOperationConverter#convert:将SqlNode转换为org.apache.flink.table.operations.ddl.CreateTableOperation,当然convert()方法包含对Query, Create, Drop, Insert 的处理,本文只关注convertCreateTable模块; 调用TableEnvironmentImpl#registerCatalogTableInternal 把生成的CreateTableOperation注册到CatalogManager 上, 注册的元数据信息之后可以被sql 查询引用; 调用GenericInMemoryCatalog#createTable 将表的信息添加到catalog 元数据上;

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

【Kubernetes系列】第8篇 CI/CD之全流程实践

前言 本实践中已经的示例代码及jenkins-agent镜像已经推送归档至github,-->传送门 注意本实践中均为内网数据,你测试时一定要改为自己的环境的有效数据。 由于本实践涉及组件较多,若有操作不明确的话,你可以后台留言,我们一起完善。 具体操作时若有不清楚,或是错误可以留言,大家一起解决。 1. 准备基础数据 配置gitlab 创建项目 上传示例代码 _注_: 本次示例使用的gitlab项目地址为:http://gitlab.hanker.com/colynn/hanker-hello.git 配置harbor 创建项目, 用于存储构建的镜像 _注_: 本次示例使用的harbor地址为 10.0.0.185:5000/hanker/hanker-hello:v1 jenkins 验证信息 添加 gitlab 帐号信息 _操作指引_:【Credentials】-> 【System】-> 【Global credentials】-> 【Add Credentials】 harbor 信息 _操作指引_:【Credentials】-> 【System】-> 【Global credentials】-> 【Add Credentials】 k8s namespace验证信息 在你的k8s master节点上执行如下操作: 1.创建serviceaccount $ kubectl -n devops create serviceaccount jenkins-robot 命令输出: serviceaccount/jenkins-robot created 2.角色绑定 $ kubectl -n devops create rolebinding jenkins-robot-binding --clusterrole=cluster-admin --serviceaccount=devops:jenkins-robot 命令输出: rolebinding.rbac.authorization.k8s.io/jenkins-robot-binding created 3.获取 ServiceAccount $ kubectl -n devops get serviceaccount jenkins-robot -o go-template --template='{{range .secrets}}{{.name}}{{"\n"}}{{end}}' jenkins-robot-token-n8w6b 4.基于base64解码 ServiceToken $ kubectl -n devops get secrets jenkins-robot-token-n8w6b -o go-template --template '{{index .data "token"}}' | base64 --decode 命令输出: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZXZvcHMiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlY3JldC5uYW1lIjoiamVua2lucy1yb2JvdC10b2tlbi1uOHc2YiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJqZW5raW5zLXJvYm90Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiOTcyZTY0OGYtMTYxZC00NmM5LWI0ZjgtYjFkNTdlOWY4NTBjIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50OmRldm9wczpqZW5raW5zLXJvYm90In0.ArQvcaEqCaeU1ZcJ6nOC5rLaTZr_vLDrpLCt87asltMUWj2gSli_mXUTrl09hBnBDXI3A1D4rJXHKLHjIAA4nN8qRIRGbpqSNzDwmqJr-jmmmWWZFrZ3n3Al9-13KJnNOK8pcWr70rt3Rsigt4B6CIQ0-ZLK8BZhvROJSifeOfJ6xe2KBqdXBv1ccZZZfEhPLgGbaR5yWm5jLvOMr2MQiPDrZoHOEkcMt-C0xipytOp4sJCJ4bQhb-UoMu1owYydxbd6O7xO71fvqP_bMDpZXC601nA2ggK7h-vi6CJffHv5MM59q8X_DWe1NnZS6KXiMmkXqAmBn10Yu20PNj-kjg 5.添加 Secret text验证信息 _操作指引_:【首页】->【Credentials】-> 【System】-> 【Global credentials】-> 【Add Credentials】-> 选择【Secret text】类型 然后将上一步 解码的结果 更新至 Secret, Pipeline 中 2. 如何创建 jenkins pipeline 1. 创建jenkins pipeline item _操作指引_:【首页】->【New Item】 2. pipeline script 步骤说明 _注_: pipeline主要包含三个阶段(检出代码、制作镜像、部署服务),下面跟大家解释下,如何编写pipeline, 借助Pipeline Syntax生成的只是部分代码,你可以根据语言规范将其完善。 1.阶段1,检出代码 _操作指引_:【首页】->【hanker-hello-demo】-> 【Pipeline Syntax】 _注_: 本实践中选取的 git: Git 类型,当然你也可以选择 checkout: Check out from version control 获取到该步骤的脚本 git credentialsId: 'gitlab-project-auth', url: 'http://gitlab.hanker.com/colynn/hanker-hello.git' 2.阶段2,构建镜像 _操作指引_:类似于 阶段1, 完善获取该步骤脚本 script { withDockerRegistry(credentialsId: 'harbor-auth', url: 'http://10.0.0.185:5000') { def customImage = docker.build("10.0.0.185:5000/devops/hanker-hello:v1") customImage.push() } } _注_: 支持本阶段需要jenkins-agent镜像里包含docker命令。 3.阶段3. 部署服务 _参考_: jenkins kubernetes cli plugin _注_: 支持本阶段需要jenkins-agent镜像里包含kubectl命令。 3. 设置 pipeline _注_: General/ Build Triggers/ Advanced Project Options 这三块你可以根据自己需要设置,将各阶段的脚本合并,更新至 Pipline -> Script内。 合并后的pipeline脚本内容如下: pipeline { agent any stages { stage('checkout') { steps { git credentialsId: 'gitlab-project-auth', url: 'http://gitlab.hanker.com/colynn/hanker-hello.git' } } stage('docker-publish') { steps{ script { withDockerRegistry(credentialsId: 'harbor-auth', url: 'http://10.0.0.185:5000') { def customImage = docker.build("10.0.0.185:5000/devops/hanker-hello:v1") customImage.push() } } } } stage('application-deploy') { steps { withKubeConfig([credentialsId: '5a5517f3-3d38-459d-bafc-12b55beeb588', serverUrl: 'https://10.0.0.182:6443']) { sh '/usr/bin/kubectl apply -f k8s-setup.yml' } } } } } 3. 触发构建 4. 结果确认 1.确认 jenkina-agent 启动状态; $ kubectl -n devops get pods |grep jnlp jnlp-sh8zl 1/1 Running 0 14s // 查看jenkins-agent pod日志 $ kubectl -n devops logs -f [jenkins-agent-pod-name] _注_: 如果长时间没有启动jenkins-agent, 可以确认下集群内是否有足够的资源。 2.确认pipeline 执行状态; 3.确认harbor镜像仓库里是否已经有新推送的镜像 _注_: harbor里的项目是需要你先创建好的,不然推送时会报错。 4.确认部署的服务状态 k8s master节点上执行如下操作: $ kubectl -n devops get pod,deployment,svc,ingress |grep hanker-hello pod/hanker-hello-5b7586f86d-5j7kk 1/1 Running 0 173m deployment.extensions/hanker-hello 1/1 1 1 3h8m service/hanker-hello-svc ClusterIP 10.233.22.19 <none> 8080/TCP 3h8m ingress.extensions/hanker-hello-ingress hanker-hello-demo.dev.hanker.net 80 3h8m 附录 自定义jenkins-agent镜像 ## 基于 https://github.com/Kubernetes-Best-Pratice/jenkins-jnlp-agent.git $ git checkout https://github.com/Kubernetes-Best-Pratice/jenkins-jnlp-agent.git $ cd jenkins-jnlp-agent $ docker build . $ docker tag tag-name custom-private-repository-addr _注_: 你也可以基于基础镜像创建自定义的镜像 可以做的更完善 配置webhook, 自动触发jenkins job; 当前我们实践时构建的镜像版本使用的是固定的, 你是否可以将其替换为依赖pipeline环境变量或是传参的形式,将其变是更有意义; 上一篇文章中在设置【配置Kubernetes Pod Template】时,我们提到可以挂载主机或是网络共享存储,你是否可以通过这个将你的构建快起来; 我们的示例代码使用的go, 直接是镜像内打包,如何更好的就好的其他语言的构建,你可以参考Using Docker with Pipeline; 你想过如何下载构建过程中的产物吗,等等。 参考链接 : https://github.com/jenkinsci/kubernetes-cli-plugin/blob/master/README.md 下载kubectl: https://docs.docker.com/ee/ucp/user-access/kubectl/

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

阿里云服务器怎么用APP备案操作流程

阿里云APP端申请备案是现在比较流行的备案方法,方便快捷,适合新手使用。 阿里云2000券免费领取(阿里云券的作用:购买阿里云产品,最后支付结算的时候,阿里云券可抵扣一部分费用。 要注意的是,目前支持首次备案和新增网站(原备案不在阿里云)两种备案场景。暂时不支持新增网站(原备案在阿里云)、接入备案、变更备案等其他备案场景,其他的备案场景都可在PC端操作。 使用阿里云APP端申请备案时,备案申请操作步骤如下: 1、登录阿里云APP,进入APP备案操作入口。 如果在APP端备案时,系统提示前往PC端进行操作,那么你当前的场景就只能在PC端操作了。 2、填写信息及备案接入产品验证备案类型 填写主办单位信息和网站等信息,根据备案类型上传主办单位的证件材料,并进行真实性核验。 3、选择买好的服务器,进行产品验证。 阿里云2000券免费领取(阿里云券的作用:购买阿里云产品,最后支付结算的时候,阿里云券可抵扣一部分费用。 说明:如果无法选择服务器实例,可能是因为无可用备案服务号,建议更换有可用备案服务号的服务器。更多可能无法选择实例的可能原因及 系统会根据填写信息自动判定要办理的备案类型。 4、填写主体信息和网站信息 填写网站信息以及办理备案的个人或者单位的真实信息。上传主体负责人和网站负责人的证件,并进行网站负责人的真实性核验。 5、上传资料 上传证件照片或证件彩色扫描件。 6、信息核验 在提交备案申请订单前,请您在此步骤中仔细确认您的主体、网站、接入等备案信息是否正确,确认无误后提交备案订单。 说明:如果使用PC端进行备案申请,在移动端完成资料上传和真实性核验后,您可在移动端继续信息核验。如果您的登录账号无法登录阿里云APP,就要去PC端继续操作信息核验。 7、备案初审 提交备案申请后,阿里云备案审核专员会对备案信息初步审核。 8、管局审核初审完成后,阿里云备案审核专员会将备案申请转交至对应管局处做最终的管局审核。管局审核通过后您的备案即已完成,审核结果会发送至短信、邮箱。 9、不管阿里审核,还是管局审核期间,在工作时间内都要保持手机有人接听状态,老魏就是因为审核专员多次打电话无人接听,延误了备案时间。 阿里云2000券免费领取(阿里云券的作用:购买阿里云产品,最后支付结算的时候,阿里云券可抵扣一部分费用。

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

6张图说清楚Tomcat原理及请求流程

前言 很多东西在时序图中体现的已经非常清楚了,没有必要再一步一步的作介绍,本文以图为主,然后对部分内容加以简单解释。绘制图形使用的工具是 PlantUML + Visual Studio Code + PlantUML Extension 本文对 Tomcat 的介绍以 Tomcat-9.0.0.M22 为标准。Tomcat-9.0.0.M22 是 Tomcat 目前最新的版本,但尚未发布,它实现了 Servlet4.0 及 JSP2.3 并提供了很多新特性,需要 1.8 及以上的 JDK 支持等等,详情请查阅 Tomcat-9.0-docOverviewConnector Init and StartRequtst ProcessAcceptorPollerWorkerContainerAt last Overview Connector 启动以后会启动一组线程用于不同阶段的请求处理过程。Acceptor 线程组。用于接受新连接,并将新连接封装一下,选择一个 Poller 将新连接添加到 Poller 的事件队列中。Poller 线程组。用于监听 Socket 事件,当 Socket 可读或可写等等时,将 Socket 封装一下添加到 worker 线程池的任务队列中。worker 线程组。用于对请求进行处理,包括分析请求报文并创建 Request 对象,调用容器的 pipeline 进行处理。Acceptor、 Poller、 worker 所在的 ThreadPoolExecutor 都维护在 NioEndpoint 中。 Connector Init and Start initServerSocket(),通过 ServerSocketChannel.open() 打开一个 ServerSocket,默认绑定到 8080 端口,默认的连接等待队列长度是 100, 当超过 100 个时会拒绝服务。我们可以通过配置 conf/server.xml 中 Connector 的 acceptCount 属性对其进行定制。createExecutor() 用于创建 Worker 线程池。默认会启动 10 个 Worker 线程,Tomcat 处理请求过程中,Woker 最多不超过 200 个。我们可以通过配置 conf/server.xml 中 Connector 的 minSpareThreads 和 maxThreads 对这两个属性进行定制。Pollor 用于检测已就绪的 Socket。 默认最多不超过 2 个, Math.min(2,Runtime.getRuntime().availableProcessors());。我们可以通过配置 pollerThreadCount 来定制。Acceptor 用于接受新连接。默认是 1 个。我们可以通过配置 acceptorThreadCount 对其进行定制。欢迎大家关注我的公种浩【程序员追风】,文章都会在里面更新,整理的资料也会放在里面。 Requtst Process Acceptor Acceptor 在启动后会阻塞在 ServerSocketChannel.accept(); 方法处,当有新连接到达时,该方法返回一个 SocketChannel。配置完 Socket 以后将 Socket 封装到 NioChannel 中,并注册到 Poller, 值的一提的是,我们一开始就启动了多个 Poller 线程,注册的时候,连接是公平的分配到每个 Poller 的。 NioEndpoint 维护了一个 Poller 数组,当一个连接分配给 pollers[index] 时,下一个连接就会分配给 pollers[(index+1)%pollers.length].addEvent() 方法会将 Socket 添加到该 Poller 的 PollerEvent 队列中。到此 Acceptor 的任务就完成了。 Poller selector.select(1000)。当 Poller 启动后因为 selector 中并没有已注册的 Channel,所以当执行到该方法时只能阻塞。所有的 Poller 共用一个 Selector,其实现类是 sun.nio.ch.EPollSelectorImplevents() 方法会将通过 addEvent() 方法添加到事件队列中的 Socket 注册到 EPollSelectorImpl,当 Socket 可读时, Poller 才对其进行处理createSocketProcessor() 方法将 Socket 封装到 SocketProcessor 中, SocketProcessor 实现了 Runnable 接口。 worker 线程通过调用其 run() 方法来对 Socket 进行处理。execute(SocketProcessor) 方法将 SocketProcessor 提交到线程池,放入线程池的 workQueue 中。 workQueue 是 BlockingQueue 的实例。到此 Poller 的任务就完成了。 Worker worker 线程被创建以后就执行 ThreadPoolExecutor 的 runWorker() 方法,试图从 workQueue 中取待处理任务,但是一开始 workQueue 是空的,所以 worker 线程会阻塞在 workQueue.take() 方法。当新任务添加到 workQueue后, workQueue.take() 方法会返回一个 Runnable,通常是 SocketProcessor, 然后 worker 线程调用 SocketProcessor 的 run() 方法对 Socket 进行处理。createProcessor() 会创建一个 Http11Processor, 它用来解析 Socket,将 Socket 中的内容封装到 Request 中。注意这个 Request 是临时使用的一个类,它的全类名是 org.apache.coyote.Request,postParseRequest() 方法封装一下 Request,并处理一下映射关系 (从 URL 映射到相应的 Host、 Context、 Wrapper)。CoyoteAdapter 将 Rquest 提交给 Container 处理之前,并将 org.apache.coyote.Request 封装到 org.apache.catalina.connector.Request,传递给 Container 处理的 Request 是 org.apache.catalina.connector.Request。connector.getService().getMapper().map(),用来在 Mapper 中查询 URL 的映射关系。映射关系会保留到 org.apache.catalina.connector.Request 中, Container 处理阶段 request.getHost() 是使用的就是这个阶段查询到的映射主机,以此类推 request.getContext()、 request.getWrapper() 都是。connector.getService().getContainer().getPipeline().getFirst().invoke() 会将请求传递到 Container 处理,当然了 Container 处理也是在 Worker 线程中执行的,但是这是一个相对独立的模块,所以单独分出来一节。 Container 需要注意的是,基本上每一个容器的 StandardPipeline 上都会有多个已注册的 Valve,我们只关注每个容器的 Basic Valve。其他 Valve 都是在 Basic Valve 前执行。request.getHost().getPipeline().getFirst().invoke() 先获取对应的 StandardHost,并执行其 pipeline。request.getContext().getPipeline().getFirst().invoke() 先获取对应的 StandardContext, 并执行其 pipeline。request.getWrapper().getPipeline().getFirst().invoke() 先获取对应的 StandardWrapper,并执行其 pipeline。最值得说的就是 StandardWrapper 的 Basic Valve, StandardWrapperValveallocate() 用来加载并初始化 Servlet,值的一提的是 Servlet 并不都是单例的,当 Servlet 实现了 SingleThreadModel 接口后, StandardWrapper 会维护一组 Servlet 实例,这是享元模式。当然了 SingleThreadModel 在 Servlet 2.4 以后就弃用了。createFilterChain() 方法会从 StandardContext 中获取到所有的过滤器,然后将匹配 Request URL 的所有过滤器挑选出来添加到 filterChain 中。doFilter() 执行过滤链, 当所有的过滤器都执行完毕后调用 Servlet 的 service() 方法。 Reference 《How Tomcat works》《Tomcat 架构解析》-- 刘光瑞Tomcat-9.0-docapache-tomcat-9.0.0.M22-srctomcat 架构分析 (connector NIO 实现) 最后欢迎大家一起交流,喜欢文章记得点个赞哟,感谢支持!

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

Python全栈 Web(JavaScript 运算符、流程控制)

运算符: 赋值运算符:= 算术运算符:+ - * / % 自增自减:++ -- 自增自减在单独使用时放前放后没区别 如果参与其他运算时分前缀和后缀 ++ 在后 先使用后自增 ++ 在前 先自增后使用 关系运算符 >、 >=、 <、 <=、 ==、 != ===全等/恒等 !==不全等/不恒等 关系运算符的结果都为boolean类型 数字与字符串进行比较: 实现自动转换数据类型在比较 如果转换成功 按照数字比较 失败会变成NaN与数字比较 永远都是false 字符串之间的比较: 每个字符分别按照Unicode编码比较大小 如果当前字符相同进行后移 不相同直接出结果 == != 先进行数据转换后进行比较 只进行值得比较 === !== 直接进行数据比较 进行数据转换 同时判断数据类型和值是否完全相等 逻辑运算符: !非 对现有条件进行取反 非真

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

新服务器环境安装和项目部署流程

记录一下在服务器部署项目的过程,长期更新 涉及:Java、tomcat、nginx、mysql、ssl、域名、服务器 docker方式搭建服务器环境参考:使用docker快速搭建服务器环境 环境 阿里云ECS服务器、阿里云购买的域名、阿里云购买的ssl CentOS 6.9 64位 购买服务器 配置安全组 配置常用端口访问,比如22、8080、3306等 购买域名 购买域名为 xxxxx.com 购买后,在阿里云里可以购买免费的ssl证书(百度有教)。 解析xxx.xxxxx.com到服务器ip 备案。国内服务器需要备案,否则无法通过域名访问到你的网站。你也可以选择使用https方式暂时免去备案 服务器环境配置 远程登录服务器 Windows下远程管理服务器软件:WinSCP Windows下SSH登录服务器软件:Xshell Mac下远程管理服务器软件:ForkLift Mac下SSH登录服务器软件:autossh工具 下载Java安装包下载 注意,需要手动下载,因为oracle下载Java的时候有个同意协议的操作,如果用命令行方式安装Java,会出问题。所以直接手动下载,然后上传到服务器内即可。我安装的是server-jre-8u181-linux-x64.tar.gz 安装Java 我的解压路径 /usr/java/ 命令行操作 tar -zxvf jdk-8u161-linux-x64.tar.gz vi /etc/profile source /etc/profile vi编辑profile文件时,输入下面的文字(注意Java解压路径) #set java environment JAVA_HOME=/usr/java/jdk1.8.0_161 JRE_HOME=/usr/java/jdk1.8.0_161/jre CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin export JAVA_HOME JRE_HOME CLASS_PATH PATH 下载Tomcat下载地址 和Java一样,手动下载,然后上传到服务器 安装Tomcat 把下载下来的压缩包解压到目录,我的解压路径 /usr/tomcat/ 命令行操作 tar zxvf apache-tomcat-9.0.6.tar.gz 设置Tomcat Host Manager 网页访问(可选) 进入 tomcat根目录/conf/tomcat-users.xml,进入以下代码添加用户 <role rolename="manager-gui"/> <role rolename="admin-gui"/> <user username="admin" password="admin123" roles="admin-gui,manager-gui"/> 这样admin这个用户就可以用网页登录Host Manager、Server Status和Manager App。如果不做此操作,日后要发布应用必须使用命令行。 设置tomcat开机自启动(推荐) 进入 /etc/rc.d/rc.local 加入以下配置,注意路径 export JAVA_HOME=/usr/java/jdk1.8.0_161 /usr/tomcat/apache-tomcat-9.0.6/bin/startup.sh start 然后设置rc.local为可执行文件,并重启服务器 chmod +x /etc/rc.d/rc.local shutdown -r now 重启完成后重新登录服务器,检查tomcat是否启动。如果什么都不返回,则tomcat服务未开启 lsof -i:8080 如果报错找不到命令,则yum方式安装 yum install lsof 使用Nginx 如果需要在服务器里多域名访问多个项目,如公司产品和公司官网。则可以使用nginx进行代理。注意前提是购买的域名已经解析到了服务器(将ip解析到xxx.xxxxx.com) 安装Nginx 建议使用编译方式安装,教程: CentOS6.9编译安装Nginx1.12更新: 以下内容留作备忘,不需要看 需要注意的是,安装pcre的时候,在解压了pcre包后,进行make等操作成功以后,要将pcre文件夹放/usr/src下,而后在编译nginx时,需要这样: ./configure --with-pcre=/usr/src/pcre目录 make make install 否则可能会报错找不到pcre 配置nginxnginx服务器安装及配置文件详解Nginx配置端口转发 映射 以及连接超时问题Linux(CentOS)下设置nginx开机自动启动和chkconfig管理 配置举例(配置了https 访问 Tomcat访问页): 有几点要注意 如果你要所有项目都使用https,则需要将他们配置在443端口的ssl配置节点。 nginx访问静态资源可能会报错Permission Denied,此时应该讲nginx用户改为root,如代码里第一行 关于域名ssl证书的设置,阿里云里有教 阿里云可以配置免费ssl,但是只能配置单域名ssl user root; # 用户为root worker_processes 1; error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; pid logs/nginx.pid; events { worker_connections 2048; } http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; access_log logs/access.log ; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; # HTTPS server 证书 server { listen 443; server_name xxx.xxxxx.com; # 阿里云里配置的域名,此域名已经申请了ssl证书 ssl on; root html; index index.html index.htm; ssl_certificate cert/212312312321367.pem; #阿里云里下载的证书文件 ssl_certificate_key cert/2149412231235300167.key;#阿里云里下载的证书文件 ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; # 访问 https://xxx.xxxxx.com/tomcat 可直接访问tomcat管理页面 location /tomcat { proxy_pass http://127.0.0.1:8080/manager/html; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } # 配置tomcat管理页的静态资源,不配置的话,访问tomcat管理页时图片等资源无法加载 # 这里我将webapp/ROOT下的管理页静态资源复制到了 /usr/local/nginx/html/下 location ~* \.(gif|jpg|jpeg|css|js|png)$ { root /usr/local/nginx/html/; } } } 此时访问 https://xxx.xxxxx.com/manager就可以访问Tomcat管理页 安装Mysql 检查系统是否安装其他版本的MYSQL数据 yum list installed | grep mysql yum -y remove mysql-libs.x86_64 安装MYSQL数据库 更新:简便安装方法:centos6.9安装mysql 准备工作 wget http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm rpm -ivh mysql-community-release-el6-5.noarch.rpm yum repolist all | grep mysql yum install mysql-community-server -y 设置为开机启动 chkconfig --list | grep mysqld chkconfig mysqld on 设置密码 /usr/bin/mysqladmin -u root password 123456 设置远程访问(可选) root登录数据库,输入 # 注意填写root的密码 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'youpassword' WITH GRANT OPTION; # 重载授权表 FLUSH PRIVILEGES; 如果设置后依旧无法访问,则检查服务器是否开启3306端口,或检查/etc/my.cnf里是否有bind-address=127.0.0.1,有则注释掉

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Rocky Linux

Rocky Linux

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

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册