Kotlin Misk Web框架
Kotlin Misk Web框架
- 1 Misk 框架介绍
- 2 Misk/SpringBoot 框架对比
- 3 Misk 添加依赖/配置
- 3.1 build.gradle.kts
- 3.2 settings.gradle.kts
- 3.3 gradle.properties
- 4 Misk 请求接口
- 5 Misk 程序模块
- 6 Misk 主服务类
- 7 Misk 测试结果
1 Misk 框架介绍
Misk 是由 Square 公司开发的一个开源的多语言服务器框架,主要用于构建微服务。它主要使用 Kotlin 语言,但也支持 Java。Misk 的设计目标是提供一个现代化、高效、易于使用的框架,用于快速开发和部署微服务。
| 主要特点和组件 | 解释 |
|---|---|
| 依赖注入 | Misk 使用 Google 的 Guice 库进行依赖注入。这使得代码更加模块化,易于测试和维护。 |
| Web 服务支持 | Misk 提供了强大的 Web 服务支持,包括路由、请求处理、响应生成等。它使用注解来定义 API 端点,使得创建 RESTful 服务变得简单,Misk 内置了对 HTTP 和 gRPC 的支持。通过简单的注解,可以快速定义 RESTful API 和 gRPC 服务。 |
| 数据库支持 | Misk 集成了 JDBC 和各种 ORM 框架,支持多种数据库操作。它还提供了事务管理和连接池管理。 |
| 配置管理 | Misk 提供了灵活的配置管理系统,支持不同环境(如开发、测试、生产)的配置。 |
| 健康检查和指标 | Misk 内置了健康检查和指标收集功能,有助于监控和管理服务的运行状态。 |
| 安全性 | Misk 提供了认证和授权支持,包括 JWT 认证、CORS 配置等。 |
| 测试支持 | Misk 提供了丰富的测试工具和框架,使得单元测试和集成测试变得容易。 |
| 异步编程 | Misk 支持 Kotlin 协程,使得异步编程变得更加简单和高效。 |
| 服务发现和负载均衡 | Misk 提供了服务发现和负载均衡的功能,有助于构建分布式系统。 |
| 插件系统 | Misk 有一个灵活的插件系统,允许开发者轻松扩展和定制框架的功能。 |
| 核心组件 | 解释 |
|---|---|
| MiskWeb | 用于构建 Web 服务和管理控制台的组件。 |
| MiskHibernate | 提供与 Hibernate 集成的数据库访问功能。 |
| MiskService | 用于定义和管理服务生命周期的组件。 |
| MiskSecurity | 提供安全相关的功能,包括认证和授权 |
2 Misk/SpringBoot 框架对比
| Misk | SpringBoot |
|---|---|
| 设计理念:Misk 是由 Square 开发的,专门用于构建微服务。它注重开发者体验、可维护性和扩展性。 依赖注入:基于 Google 的 Guice 依赖注入框架。 模块化:使用模块化设计,鼓励将应用分成多个模块,易于管理和测试。 核心功能:内置了很多 Square 的最佳实践和工具,如服务发现、数据库访问、配置管理等。 | 设计理念:Spring Boot 是基于 Spring 框架的,旨在简化 Spring 应用的开发过程,提供了开箱即用的配置。 依赖注入:使用 Spring 的核心功能——依赖注入(Dependency Injection)。 自动配置:xSpring Boot 提供了自动配置功能,减少了开发者的配置工作量。 广泛使用:由于 Spring 的历史和广泛的社区支持,Spring Boot 提供了大量的集成和插件支持。 |
| 配置管理:Misk 使用 YAML 文件进行配置,支持多环境配置和动态配置管理。 扩展性:通过模块化设计,可以很容易地添加或移除功能模块。 | 配置管理:Spring Boot 使用 application.properties 或 application.yml 文件进行配置,支持多种配置源(文件、环境变量、命令行参数等)。 扩展性:Spring Boot 提供了强大的自动配置机制和大量的 Starter 项目,可以轻松集成第三方库和服务。 |
| 易用性:Square 提供了详细的文档和示例,开发者可以快速上手。 工具支持:提供了很多内部工具,如数据迁移、监控、日志等,简化了开发和运维过程。 | 易用性:Spring Boot 提供了丰富的文档和社区支持,开发者可以通过 Spring Initializr 快速创建项目。 工具支持:Spring Boot 有丰富的 IDE 支持(如 IntelliJ IDEA 和 Eclipse),并且有大量的第三方插件和扩展。 |
| 社区:由于是 Square 开发并使用,社区相对较小,但有一定的活跃度和支持。 生态系统:主要由 Square 及其相关项目组成,生态系统相对封闭,但具有很高的内聚力和一致性。 | 社区:Spring 社区非常庞大和活跃,有大量的开发者、教程、论坛和开源项目支持。 生态系统:Spring Boot 拥有非常丰富的生态系统,几乎可以找到与任何技术栈的集成和支持。 |
| 性能:由于是为微服务设计的,Misk 在性能方面有很多优化,尤其是在高并发场景下表现良好。 稳定性:Square 内部广泛使用,经过了实际生产环境的验证。 | 性能:Spring Boot 性能优异,特别是在大型企业应用和复杂的微服务架构中表现出色。稳定性:经过多年发展和大量企业应用验证,Spring Boot 非常稳定可靠。 |
| Misk 更适合那些想要快速构建和部署微服务,并且愿意采用 Square 的最佳实践和工具的团队。它的模块化设计和高性能优化使其在特定场景下非常有优势。 | Spring Boot 则更适合需要广泛集成和社区支持的项目。它的自动配置和强大的生态系统使其在各种规模和复杂度的项目中都能得心应手。 |
3 Misk 添加依赖/配置
3.1 build.gradle.kts
import org.jetbrains.kotlin.cli.jvm.compiler.findMainClassplugins {kotlin("jvm") version "2.0.0"
}group = "com.xu"
version = "1.0.0"repositories {mavenCentral()
}dependencies {testImplementation(kotlin("test"))implementation("com.squareup.misk:misk:2024.06.19.153119-a4bdcea")implementation("com.squareup.misk:misk-actions:2024.06.19.153119-a4bdcea")implementation("com.squareup.misk:misk-core:2024.06.19.153119-a4bdcea")implementation("com.squareup.misk:misk-inject:2024.06.19.153119-a4bdcea")implementation("com.squareup.misk:misk-service:2024.06.19.153119-a4bdcea")
}tasks.test {useJUnitPlatform()
}kotlin {jvmToolchain(21)
}
3.2 settings.gradle.kts
plugins {id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0"
}rootProject.name = "misk-test"
3.3 gradle.properties
kotlin.code.style=official
4 Misk 请求接口
package com.xu.actionimport com.google.inject.Inject
import com.google.inject.Singleton
import misk.web.Get
import misk.web.PathParam
import misk.web.Post
import misk.web.QueryParam
import misk.web.RequestBody
import misk.web.ResponseContentType
import misk.web.actions.WebAction
import misk.web.mediatype.MediaTypes@Singleton
class HelloWebAction @Inject constructor() : WebAction {@Get("/hello1/{name}")@ResponseContentType(MediaTypes.APPLICATION_JSON)fun hello1(@PathParam name: String, @QueryParam addr: String): List<String> {return listOf("你好", name, addr)}@Post("/hello2")@ResponseContentType(MediaTypes.APPLICATION_JSON)fun hello2(@RequestBody body: Student): Map<String, Any> {return mapOf("student" to body)}data class Student(val name: String, val addr: String);}
5 Misk 程序模块
package com.xuimport com.xu.action.HelloWebAction
import misk.inject.KAbstractModule
import misk.web.WebActionModuleclass HelloWorldModule : KAbstractModule() {override fun configure() {install(WebActionModule.create<HelloWebAction>())}}
6 Misk 主服务类
package com.xuimport misk.MiskApplication
import misk.MiskRealServiceModule
import misk.environment.DeploymentModule
import misk.web.MiskWebModule
import misk.web.WebConfig
import wisp.deployment.Deploymentfun main(args: Array<String>) {val webConfig = WebConfig(port = 8080)val deployment = Deployment(name = "HelloWorldService",isProduction = true)MiskApplication(modules = listOf(MiskWebModule(webConfig),HelloWorldModule(),MiskRealServiceModule(),DeploymentModule(deployment))).run(args)
}
7 Misk 测试结果


相关文章:
Kotlin Misk Web框架
Kotlin Misk Web框架 1 Misk 框架介绍2 Misk/SpringBoot 框架对比3 Misk 添加依赖/配置3.1 build.gradle.kts3.2 settings.gradle.kts3.3 gradle.properties 4 Misk 请求接口5 Misk 程序模块6 Misk 主服务类7 Misk 测试结果 1 Misk 框架介绍 Misk 是由 Square 公司开发的一个开…...
【设计模式之美】【建造型】工厂模式:通过面向接口编程思路,串起业务流程
文章目录 一. 简单工厂(Simple Factory)第一种简单工厂:面向接口编程与工厂类:划分功能职责第二种:单例简单工厂:节省内存和对象创建的时间 二. 工厂方法(Factory Method)࿱…...
AI算法19-偏最小二乘法回归算法Partial Least Squares Regression | PLS
偏最小二乘法回归算法简介 算法概述 偏最小二乘法模型可分为偏最小二乘回归模型和偏最小二乘路径模型。其中偏最小二乘回归模型是一种新型的多元统计方法,它集中了主成分分析、典型相关分析和线性回归的特点,特别在解决回归中的共线性问题具有无可比拟…...
live555关于RTSP协议交互流程
RTP在和h264 RTP在和h265 RTP载荷AAC live555关于RTSP协议交互流程 live555的核心数据结构值之闭环双向链表 live555 rtsp服务器实战之createNewStreamSource 概要 rtsp在交互的过程中用到很多协议:tcp,udp,rtp,rtcp,sdp等协议;该篇文章主要分析在live555中这些…...
Centos7 安装私有 Gitlab
在 CentOS 7上,下面的命令也会在系统防火墙中打开 HTTP、HTTPS 和 SSH 访问。这是一个可选步骤,如果您打算仅从本地网络访问极狐GitLab,则可以跳过它。 sudo yum install -y curl policycoreutils-python openssh-server perl sudo systemct…...
浅谈数学模型在UGC/AIGC游戏数值配置调参中的应用(AI智能体)
浅谈数学模型在UGC/AIGC游戏数值配置调参中的应用 ygluu 卢益贵 关键词:UGC、AIGC、AI智能体、大模型、数学模型、游戏数值调参、游戏策划 一、前言 在策划大大群提出《游戏工厂:AI(AIGC/ChatGPT)与流程式游戏开发》讨论之后就…...
第T5周:使用TensorFlow实现运动鞋品牌识别
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 文章目录 一、前期工作1.设置GPU(如果使用的是CPU可以忽略这步)2. 导入数据3. 查看数据 二、数据预处理1、加载数据2、数据可视化3、再…...
网络编程学习之tcp
按下*(星号)可以搜索当前光标下的单词。 Tcp编程的过程 打开网络设备 Bind:给服务地址把ip号和端口号连接进去 Tcp是有状态的 Listen是进入监听状态,看有没有客户端来连接服务器 Tcp比udp消耗过多资源 Upd类似于半双工&#…...
前端XMLHttpRequest、Fetch API、Axios实现文件上传、下载方法及后端Spring文件服务器处理方法
前言 本文总结Web应用开发中文件上传、下载的方法,即从前端表单输入文件并封装表单数据,然后请求后端服务器的处理过程;从基础的JavaScript中XmlHttpRequest对象、Fetch API实现上传、下载进行说明,并给出了前端常用的axios库的请…...
STM32智能交通监测系统教程
目录 引言环境准备智能交通监测系统基础代码实现:实现智能交通监测系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景:交通监测与管理问题解决方案与优化收尾与总结 1. 引言 智能交通监测系统通…...
【利用Selenium+autoIt实现文件上传】
利用Selenium+autoIt实现文件上传 利用Selenium+autoIT实现文件上传autoIt脚本制作转换成exe文件java代码运行部分利用Selenium+autoIT实现文件上传 当你看到这篇文章时,证明你遇到了和我一样的难题。正常情况下我们利用selenium完全可以实现表单的提交和文件上传等操作。但当…...
python join
1、join函数 *.join(seq) 以*作为分隔符,将seq所有的元素合并为一个新的字符串 seq ABDWDPO new_seq list(.joint(seq)) # ABDWDPO #[A, B, D, W, D, P, O]...
cython加速python代码
python这个语言在使用的层面上看几乎没有缺点,简单易学,语法简单,唯一的弱点就是慢, 当然了万能的python社区是给了解决方法的,那就是cython 使用Cython可以显著提升Python代码的执行效率,特别是在涉及到数…...
React@16.x(60)Redux@4.x(9)- 实现 applyMiddleware
目录 1,applyMiddleware 原理2,实现2.1,applyMiddleware2.1.1,compose 方法2.1.2,applyMiddleware 2.2,修改 createStore 接上篇文章:Redux中间件介绍。 1,applyMiddleware 原理 R…...
level 6 day1 Linux网络编程之网络基础
v1 网络的历史和分层 TCP 是可靠传输,IP协议是不可靠传输 网络的体系结构 网络分层的思想: OSI体系结构 两层交换机是指数据链路层的交换 三层交换是指网络层这边的交换 四层模型 蓝色的字 是由手机发给PC机,由传输层来决定应该交给哪一…...
PostgreSQL UPDATE 命令
PostgreSQL UPDATE 命令 PostgreSQL 是一种功能强大的开源对象关系型数据库管理系统(ORDBMS),它使用并扩展了SQL语言。在处理数据库时,我们经常需要更新现有的记录。在PostgreSQL中,UPDATE命令用于修改表中的现有记录…...
什么? CSS 将支持 if() 函数了?
CSS Working Group 简称 CSSWG, 在近期的会议中决定将 if() 添加到 CSS Values Module Level 5 中。 详情可见:css-meeting-bot 、[css-values] if() function 当我看到这个消息的时候,心中直呼这很逆天了,我们知道像 less 这些 css 这些预…...
function calling实现调用理杏仁api获取数据
LLM是不存在真正逻辑的且并不是知晓万事万物的(至少目前是这样)在很多更垂直的环境下LLM并不能很好的赋能。 function calling的实现使LLM可以对接真正的世界以及真正有逻辑的系统,这将很大程度上改变LLM的可用范围(当然安全问题依…...
Excel中用VBA实现Outlook发送当前工作簿
Excel中用VBA实现Outlook发送当前工作簿,首先按AltF11打开VBA编辑器,插入模块,并在工具-引用中勾选 Microseft Outlook .0 Object Library(其中为你Microseft Outlook的版本号。 Sub 发送邮件() 保存当前excel ThisWorkbook.Save让excel连接…...
从 ArcMap 迁移到 ArcGIS Pro
许多 ArcMap 用户正在因 ArcGIS Pro 所具有的现代 GIS 桌面工作流优势而向其迁移。 ArcGIS Pro 与其余 ArcGIS 平台紧密集成,使您可以更有效地共享和使用内容。 它还将 2D 和 3D 组合到一个应用程序中,使您可以在同一工程中使用多个地图和多个布局。 Arc…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
