上手Knative的 - 第2部分

上手Knative的 - 第2部分 在我之前的文章中 ,我谈到了 Knative Serving ,用于快速部署和无服务器容器的自动扩展。 如果您希望HTTP呼叫同步触发您的服务,Knative Serving非常棒。 但是,在无服务器的微服务世界中,异步触发器更常见且更有用。 那是 Knative Eventing 发挥作用的时候。 在Hands on Knative系列的第二部分中,我想介绍Knative Eventing并在我的 Knative Tutorial 中展示如何将其与各种服务集成的 一些示例 。 什么是Knative Eventing? Knative Eventing与Knative Serving携手合作,为松散耦合的事件驱动服务提供原语。 典型的Knative Eventing架构如下所示: 有4个主要组成部分: Source (aka Producer)从实际源读取事件并将下游转发到Channel或更不常见地直接转发到Service。 频道 从源接收事件,保存到其底层存储(稍后将详细介绍)并向所有订户扇出。 订阅 桥接通道和服务(或另一个通道)。 服务 (又名消费者)是消费事件流的Knative服务。 让我们更详细地看一下这些。 来源,渠道和订阅 Knative Eventing的最终目标是将事件从源路由到服务,并使用我之前提到的原语来实现:Source,Channel和Subscription。 Source 从实际源读取事件并将其转发到下游。 截至今天,Knative支持从 Kubernetes , GitHub , Google Cloud Pub / Sub , AWS SQS主题 , 容器 和 CronJobs中 读取事件 。 一旦事件被拉入Knative,它需要保存在内存中或更耐用的地方,如Kafka或Google Cloud Pub / Sub。 通道 发生了这种情况。 它有多种 实现 来支持不同的选项。 [Read More]

上手Knative的 - 第1部分

上手Knative的 - 第1部分 我最近一直在研究 Knative 。这个博客系列由3部分组成,我想解释一下我的学习内容并展示我在GitHub上发布的Knative Tutorial 中的示例 。 什么是Knative? Knative 是一个开源构建块的集合,用于在Kubernetes上运行的serverless容器。 在这一点上,你可能想知道:“Kubernetes,serverless,发生了什么?”但是,当你想到它时,它是有道理的。Kubernetes是非常受欢迎的容器管理平台。serverless是应用程序开发人员想要运行其代码的方式。Knative将两个世界与一组构建块结合在一起。 谈到构建块,它由3个主要组件组成: Knative Serving 用于快速部署和serverless容器的自动扩展。 Knative Eventing针对松散耦合的事件驱动服务的。 Knative Build 用于无痛的代码到容器的注册表工作流程。 让我们从Knative Serving开始吧。 什么是Knative Serving? 简而言之,Knative Serving允许serverless容器的快速部署和自动扩展。您只需指定要部署的容器,Knative将详细说明如何创建该容器并将流量路由到该容器。将serverless容器部署为Knative服务后,您将获得自动扩展,每个配置更改的revision,不同revision之间的流量分配等功能。 你好世界服务 要将代码部署为Knative服务,您需要: 包含您的代码并将镜像推送到公共注册表。 创建一个服务yaml文件,告诉Knative在哪里可以找到容器镜像及其具有的任何配置。 在我的Knative教程的 Hello World服务 中,我详细描述了这些步骤,但回顾一下,这是最小的Knative服务定义的 service-v1.yaml 示例: apiVersion: serving.knative.dev/v1alpha1 kind: Service metadata: name: helloworld-csharp namespace: default spec: runLatest: configuration: revisionTemplate: spec: container: # replace {username} with your DockerHub image: docker.io/{username}/helloworld-csharp:v1 env: - name: TARGET value: "C# Sample v1" runLatest 意味着我们希望使用指定的容器和配置立即部署最新版本的代码。部署服务: [Read More]

Jhipster 项目之架构分析之EditorConfig

项目开发时,随着人员的增多,需要大家规范开发中的代码格式,虽然各个开发工具都有格式代码的工具,但是人员不同个人喜好的开发工具也不同,为了遵循大家自由的选择开发工具,而又可以满足维护一致的编码样式,该如何处理呢, EditorConfig刚好就是为这种场景而生的工具 .editorconfig # EditorConfig helps developers define and maintain consistent # coding styles between different editors and IDEs # editorconfig.org root = true [*] # Change these settings to your own preference # 缩进格式为4个空格 indent_style = space indent_size = 4 # We recommend you to keep these unchanged # 设置结尾符号为LF,统一结尾符号,避免window上跟linux或mac上结尾不同 end_of_line = lf # 统一字符编码为UTF-8 charset = utf-8 # 删除换行符号前面的所有空白字符 trim_trailing_whitespace = true # Unix-style 风格的换行 insert_final_newline = true [*. [Read More]

Jhipster 项目之架构分析之angular.json

由于我选择的项目前端开发框架用的angular,那么jhipster前端angular利用到了官方的angular-cli来解决问题,

{
  "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
  "version": 1,
  "newProjectRoot": "projects",
  "projects": {
    "demo": {
      "root": "",
      "sourceRoot": "src/main/webapp",
      "projectType": "application",
      "architect": {}
    }
  },
  "defaultProject": "demo",
  "cli": {
    "packageManager": "npm"
  },
  "schematics": {
    "@schematics/angular:component": {
      "inlineStyle": true,
      "inlineTemplate": false,
      "spec": false,
      "prefix": "jhi",
      "styleExt": "css"
    },
    "@schematics/angular:directive": {
      "spec": false,
      "prefix": "jhi"
    },
    "@schematics/angular:guard": {
      "spec": false
    },
    "@schematics/angular:pipe": {
      "spec": false
    },
    "@schematics/angular:service": {
      "spec": false
    }
  }
}

这个配置文件,根据需要,设定了项目文件的源码目录,像盲目类型,项目版本,登场用配置,具体信息我们可以参考我的博文angular-cli相关的文章

Jhipster 项目之架构分析之build.gradle

java开发的项目用gradle来管理项目依赖,项目开发,我们这里面还有前端的一些东西,这些东西在不同平台上如何处理,比如window上的空格跟linux上的处理方式就不同该怎么办?jhipster通过他们丰富的经验在这里给出了模板 下面我们会详细的讲解他们这座做的原因 // 导入操作系统类,方便针对个别系统进行处理,比如window下的空格,就需要判断操作系统 import org.gradle.internal.os.OperatingSystem // buildscript { //定义的仓库 repositories { // mavnen的本地仓库 mavenLocal() // maven的中央仓库 mavenCentral() // spring的plugin 插件库 maven { url "http://repo.spring.io/plugins-release" } // spring的里程碑库 maven { url "https://plugins.gradle.org/m2/" } } //定义的依赖类路径 dependencies { // 插件依赖, classpath "org.springframework.boot:spring-boot-gradle-plugin:${spring_boot_version}" classpath "io.spring.gradle:propdeps-plugin:0.0.10.RELEASE" classpath "gradle.plugin.com.gorylenko.gradle-git-properties:gradle-git-properties:1.5.2" //jhipster-needle-gradle-buildscript-dependency - JHipster will add additional gradle build script plugins here } } // 应用的插件 plugins { // 代码质量检查插件 id "org.sonarqube" version "2.6.2" // 为什么这个地方会用apt的eclipse插件,可能为了方便把项目导入到eclipse,那么apt是什么东西呢 id "net. [Read More]

Jhipster 项目之架构分析之gitattributes

在开发一个web项目时,如果用git管理一个项目,项目中有几十中格式的文件时,git能否正常的处理这些文件呢?比如图片这种二进制,比如window平台下的bat文件在git仓库上是否应该是一样的,比如jar包这种文件,等等,像这种繁多的文件有时候并不是git默认配置情况下可以处理的非常优秀的,那么下面可以用git的属性, 的配置,让git了解这些文件具体该如何处理,并且配置什么类型的文件应该是什么格式,什么结尾,这个文件定义了常见的文件格式 # This file is inspired by https://github.com/alexkaratarakis/gitattributes # # Auto detect text files and perform LF normalization # http://davidlaing.com/2012/09/19/customise-your-gitattributes-to-become-a-git-ninja/ * text=auto # The above will handle all files NOT found below # These files are text and should be normalized (Convert crlf => lf) *.bat text eol=crlf *.coffee text *.css text *.cql text *.df text *.ejs text *.html text *.java text *.js text *.json text *.less text *.properties text *. [Read More]

Jhipster 项目之架构分析之gitignore

不论是用什么源码控制软件来控制源码,项目中会有可忽略的文件,比如一些需要运行时才生成的文件,这种文件又大,又不属于源码的范围,这种文件不太建议保存到。那么svn中有ignore的配置文件,而我们用git的中也有类似的配置文件 文件名叫.gitignore文件。 格式主要有以下两种,一种就是排除某个格式,另一种就是在排除的目录中再, 空行不匹配任何文件 #开头表示是注释内容,对于#字符如果想用,可以用转移字符 特殊字符,可以用转移字符来处理 !开头表示,非,可以用这个想排除目录中不想排除的文件设置出来 以/结尾表示忽略整个目录 如果格式不包含/就相当于在根目录下匹配 *匹配出/之外的任何内容,?匹配除了/之外的任何一个字符,[]匹配所选字符 /*.c表示匹配c结尾的格式文件 **/foo表示匹配任意目录中, /** 匹配某个目录下的所有内容 a/**/b 匹配a/x/b,a/x/y/b 上面的条目就是git的格式 ###################### # Project Specific ###################### /build/www/** /src/test/javascript/coverage/ ###################### # Node ###################### /node/ node_tmp/ node_modules/ npm-debug.log.* /.awcache/* /.cache-loader/* ###################### # SASS ###################### .sass-cache/ ###################### # Eclipse ###################### *.pydevproject .project .metadata tmp/ tmp/**/* *.tmp *.bak *.swp *~.nib local.properties .classpath .settings/ .loadpath .factorypath /src/main/resources/rebel.xml # External tool builders .externalToolBuilders/** # Locally stored "Eclipse launch configurations" *. [Read More]

Jhipster 项目之架构分析之gradle.properteis

gradle 的属性配置文件,可以直接在gradle.build中的代码project.hasProperty判断处理。 rootProject.name=demo profile=dev # Build properties node_version=10.14.1 npm_version=6.4.1 yarn_version=1.12.3 # Dependency versions jhipster_dependencies_version=2.0.29 # The spring-boot version should match the one managed by # https://mvnrepository.com/artifact/io.github.jhipster/jhipster-dependencies/${jhipster_dependencies_version} spring_boot_version=2.0.7.RELEASE # The hibernate version should match the one managed by # https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-dependencies/${spring-boot.version} --> hibernate_version=5.2.17.Final mapstruct_version=1.2.0.Final liquibase_hibernate5_version=3.6 liquibaseTaskPrefix=liquibase ## below are some of the gradle performance improvement settings that can be used as required, these are not enabled by default ## The Gradle daemon aims to improve the startup and execution time of Gradle. [Read More]

Jhipster 项目之架构分析之gradlew

gradle 的gradlew这个工具可以,下载包裹的gradle,下面我们简单来分一下该脚本,我会通过注释来描述问题。 #!/usr/bin/env sh # 从环境变量中找sh可执行命令 ############################################################################## ## ## Gradle start up script for UN*X ## ############################################################################## # Attempt to set APP_HOME # Resolve links: $0 may be a link # 第一个参数是程序路径 PRG="$0" # Need this for relative symlinks. while [ -h "$PRG" ] ; do ls=`ls -ld "$PRG"` link=`expr "$ls" : '.*-> \(.*\)$'` if expr "$link" : '/.*' > /dev/null; then PRG="$link" else PRG=`dirname "$PRG"`"/$link" fi done # 打印当前路径 SAVED="`pwd`" # 跳转到程序路径 cd "`dirname \"$PRG\"`/" >/dev/null # 获取App主目录 APP_HOME="`pwd -P`" # 跳转到保存的路径 cd "$SAVED" >/dev/null # 应用名称是Gradle APP_NAME="Gradle" # 应用的基础名称,获取文件名称路径最后一行的结果 # 举个例子 basename /abc/ddec/adfa/asdf. [Read More]

Jhipster 项目之架构分析之gradlew.bat

上一章讲了gradlew的类unix的脚本,这章主要讲一下window的内容 @if "%DEBUG%" == "" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @rem @rem ########################################################################## @rem Set local scope for the variables with windows NT shell if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. set DEFAULT_JVM_OPTS= @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java. [Read More]