当前位置: 首页 > news >正文

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 框架对比

MiskSpringBoot
设计理念: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 测试结果

Get请求
Post请求

相关文章:

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 公司开发的一个开…...

【设计模式之美】【建造型】工厂模式:通过面向接口编程思路,串起业务流程

文章目录 一. 简单工厂&#xff08;Simple Factory&#xff09;第一种简单工厂&#xff1a;面向接口编程与工厂类&#xff1a;划分功能职责第二种&#xff1a;单例简单工厂&#xff1a;节省内存和对象创建的时间 二. 工厂方法&#xff08;Factory Method&#xff09;&#xff1…...

AI算法19-偏最小二乘法回归算法Partial Least Squares Regression | PLS

偏最小二乘法回归算法简介 算法概述 偏最小二乘法模型可分为偏最小二乘回归模型和偏最小二乘路径模型。其中偏最小二乘回归模型是一种新型的多元统计方法&#xff0c;它集中了主成分分析、典型相关分析和线性回归的特点&#xff0c;特别在解决回归中的共线性问题具有无可比拟…...

live555关于RTSP协议交互流程

RTP在和h264 RTP在和h265 RTP载荷AAC live555关于RTSP协议交互流程 live555的核心数据结构值之闭环双向链表 live555 rtsp服务器实战之createNewStreamSource 概要 rtsp在交互的过程中用到很多协议:tcp,udp,rtp,rtcp,sdp等协议&#xff1b;该篇文章主要分析在live555中这些…...

Centos7 安装私有 Gitlab

在 CentOS 7上&#xff0c;下面的命令也会在系统防火墙中打开 HTTP、HTTPS 和 SSH 访问。这是一个可选步骤&#xff0c;如果您打算仅从本地网络访问极狐GitLab&#xff0c;则可以跳过它。 sudo yum install -y curl policycoreutils-python openssh-server perl sudo systemct…...

浅谈数学模型在UGC/AIGC游戏数值配置调参中的应用(AI智能体)

浅谈数学模型在UGC/AIGC游戏数值配置调参中的应用 ygluu 卢益贵 关键词&#xff1a;UGC、AIGC、AI智能体、大模型、数学模型、游戏数值调参、游戏策划 一、前言 在策划大大群提出《游戏工厂&#xff1a;AI&#xff08;AIGC/ChatGPT&#xff09;与流程式游戏开发》讨论之后就…...

第T5周:使用TensorFlow实现运动鞋品牌识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 文章目录 一、前期工作1.设置GPU&#xff08;如果使用的是CPU可以忽略这步&#xff09;2. 导入数据3. 查看数据 二、数据预处理1、加载数据2、数据可视化3、再…...

网络编程学习之tcp

按下*&#xff08;星号&#xff09;可以搜索当前光标下的单词。 Tcp编程的过程 打开网络设备 Bind&#xff1a;给服务地址把ip号和端口号连接进去 Tcp是有状态的 Listen是进入监听状态&#xff0c;看有没有客户端来连接服务器 Tcp比udp消耗过多资源 Upd类似于半双工&#…...

前端XMLHttpRequest、Fetch API、Axios实现文件上传、下载方法及后端Spring文件服务器处理方法

前言 本文总结Web应用开发中文件上传、下载的方法&#xff0c;即从前端表单输入文件并封装表单数据&#xff0c;然后请求后端服务器的处理过程&#xff1b;从基础的JavaScript中XmlHttpRequest对象、Fetch API实现上传、下载进行说明&#xff0c;并给出了前端常用的axios库的请…...

STM32智能交通监测系统教程

目录 引言环境准备智能交通监测系统基础代码实现&#xff1a;实现智能交通监测系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;交通监测与管理问题解决方案与优化收尾与总结 1. 引言 智能交通监测系统通…...

【利用Selenium+autoIt实现文件上传】

利用Selenium+autoIt实现文件上传 利用Selenium+autoIT实现文件上传autoIt脚本制作转换成exe文件java代码运行部分利用Selenium+autoIT实现文件上传 当你看到这篇文章时,证明你遇到了和我一样的难题。正常情况下我们利用selenium完全可以实现表单的提交和文件上传等操作。但当…...

python join

1、join函数 *.join(seq) 以*作为分隔符&#xff0c;将seq所有的元素合并为一个新的字符串 seq ABDWDPO new_seq list(.joint(seq)) # ABDWDPO #[A, B, D, W, D, P, O]...

cython加速python代码

python这个语言在使用的层面上看几乎没有缺点&#xff0c;简单易学&#xff0c;语法简单&#xff0c;唯一的弱点就是慢&#xff0c; 当然了万能的python社区是给了解决方法的&#xff0c;那就是cython 使用Cython可以显著提升Python代码的执行效率&#xff0c;特别是在涉及到数…...

React@16.x(60)Redux@4.x(9)- 实现 applyMiddleware

目录 1&#xff0c;applyMiddleware 原理2&#xff0c;实现2.1&#xff0c;applyMiddleware2.1.1&#xff0c;compose 方法2.1.2&#xff0c;applyMiddleware 2.2&#xff0c;修改 createStore 接上篇文章&#xff1a;Redux中间件介绍。 1&#xff0c;applyMiddleware 原理 R…...

level 6 day1 Linux网络编程之网络基础

v1 网络的历史和分层 TCP 是可靠传输&#xff0c;IP协议是不可靠传输 网络的体系结构 网络分层的思想&#xff1a; OSI体系结构 两层交换机是指数据链路层的交换 三层交换是指网络层这边的交换 四层模型 蓝色的字 是由手机发给PC机&#xff0c;由传输层来决定应该交给哪一…...

PostgreSQL UPDATE 命令

PostgreSQL UPDATE 命令 PostgreSQL 是一种功能强大的开源对象关系型数据库管理系统&#xff08;ORDBMS&#xff09;&#xff0c;它使用并扩展了SQL语言。在处理数据库时&#xff0c;我们经常需要更新现有的记录。在PostgreSQL中&#xff0c;UPDATE命令用于修改表中的现有记录…...

什么? CSS 将支持 if() 函数了?

CSS Working Group 简称 CSSWG, 在近期的会议中决定将 if() 添加到 CSS Values Module Level 5 中。 详情可见&#xff1a;css-meeting-bot 、[css-values] if() function 当我看到这个消息的时候&#xff0c;心中直呼这很逆天了&#xff0c;我们知道像 less 这些 css 这些预…...

function calling实现调用理杏仁api获取数据

LLM是不存在真正逻辑的且并不是知晓万事万物的&#xff08;至少目前是这样&#xff09;在很多更垂直的环境下LLM并不能很好的赋能。 function calling的实现使LLM可以对接真正的世界以及真正有逻辑的系统&#xff0c;这将很大程度上改变LLM的可用范围&#xff08;当然安全问题依…...

Excel中用VBA实现Outlook发送当前工作簿

Excel中用VBA实现Outlook发送当前工作簿&#xff0c;首先按AltF11打开VBA编辑器&#xff0c;插入模块&#xff0c;并在工具-引用中勾选 Microseft Outlook .0 Object Library(其中为你Microseft Outlook的版本号。 Sub 发送邮件() 保存当前excel ThisWorkbook.Save让excel连接…...

从 ArcMap 迁移到 ArcGIS Pro

许多 ArcMap 用户正在因 ArcGIS Pro 所具有的现代 GIS 桌面工作流优势而向其迁移。 ArcGIS Pro 与其余 ArcGIS 平台紧密集成&#xff0c;使您可以更有效地共享和使用内容。 它还将 2D 和 3D 组合到一个应用程序中&#xff0c;使您可以在同一工程中使用多个地图和多个布局。 Arc…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库&#xff08;uthash库&#xff09;提供对哈希表的操作&#xff0c;文章如下&#xff1a; C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…...