当前位置: 首页 > 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…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...