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

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

恶补电源:1.电桥

一、元器件的选择 搜索并选择电桥&#xff0c;再multisim中选择FWB&#xff0c;就有各种型号的电桥: 电桥是用来干嘛的呢&#xff1f; 它是一个由四个二极管搭成的“桥梁”形状的电路&#xff0c;用来把交流电&#xff08;AC&#xff09;变成直流电&#xff08;DC&#xff09;。…...