Kotlin Misk Web框架

news2025/1/11 11:50:24

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.findMainClass

plugins {
    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.action

import 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.xu

import com.xu.action.HelloWebAction
import misk.inject.KAbstractModule
import misk.web.WebActionModule

class HelloWorldModule : KAbstractModule() {

    override fun configure() {
        install(WebActionModule.create<HelloWebAction>())
    }

}

6 Misk 主服务类

package com.xu

import misk.MiskApplication
import misk.MiskRealServiceModule
import misk.environment.DeploymentModule
import misk.web.MiskWebModule
import misk.web.WebConfig
import wisp.deployment.Deployment

fun 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请求

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1922686.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FSD渐入佳境,视觉方案还在机器人中“打酱油”?

一边是技术圈顶流&#xff0c;一边在当前行业应用中没什么存在感。 优点缺点&#xff0c;两头拔尖 优点与缺点都突出的特点&#xff0c;让视觉方案一直伴随着争议&#xff0c;在近些年的行业应用上也一直透着“底气”不足。但随着在自动驾驶方面&#xff0c;纯视觉FSD开始表现…

【Linux】|开发工具介绍 | yum |vim | gcc/g++ | gdb | git

Linux开发工具详解 1. 引言&#x1f4a6;2. Linux软件包管理器&#xff1a;Yum什么是软件包安装和卸载软件rzsz工具 3. Linux编辑器&#xff1a;VimVim的基本概念Vim的基本操作Vim模式和命令集&#x1f433;Vim配置 4. Linux编译器&#xff1a;GCC/G编译过程详解编译器的自举函…

如何通过兔子和窝窝的故事理解“在机器人学习和研究中的获得成本与维护成本”(节选)

获得成本 掌握一门课程&#xff0c;以最为简单的学校成绩过60为例&#xff0c;需要按要求提交材料&#xff0c;包括作业、报告、实验和考试等&#xff0c;依据学分和考核要求的不同&#xff0c;需要对于花费时间和经历进行完成。 维护成本 考完了&#xff0c;如果被动学习那…

Django 删除单行数据

1&#xff0c;添加模型 from django.db import modelsclass Post(models.Model):title models.CharField(max_length200)content models.TextField()pub_date models.DateTimeField(date published)class Book(models.Model):title models.CharField(max_length100)author…

安防监控视频平台LntonCVS视频融合共享平台智慧消防实现远程集中视频监控方案

近年来&#xff0c;电力系统内变电站着火事件频发&#xff0c;这对消防安全管理提出了严峻挑战。我国消防安全基础设施不完善、管理机制不健全、应急处置能力不足及公众消防安全意识淡薄等问题&#xff0c;严重制约了消防安全的提升。因此&#xff0c;加强变电站的消防安全管理…

Python应用爬虫下载QQ音乐歌曲!

目录&#xff1a; 1.简介怎样实现下载QQ音乐的过程&#xff1b; 2.代码 1.下载QQ音乐的过程 首先我们先来到QQ音乐的官网&#xff1a; https://y.qq.com/&#xff0c;在搜索栏上输入一首歌曲的名称&#xff1b; 如我在上输入最美的期待&#xff0c;按回车来到这个画面 我们首…

nx上darknet的使用-目标检测-在python中的使用

1 内置的代码 在darknet中已经内置了两个py文件 darknet_video.py与darknet_images.py用法类似&#xff0c;都是改一改给的参数就行了&#xff0c;我们说一下几个关键的参数 input 要预测哪张图像weights 要使用哪个权重config_file 要使用哪个cfg文件data_file 要使用哪个da…

240712_昇思学习打卡-Day24-LSTM+CRF序列标注(3)

240712_昇思学习打卡-Day24-LSTMCRF序列标注&#xff08;3&#xff09; 今天做LSTMCRF序列标注第三部分&#xff0c;同样&#xff0c;仅作简单记录及注释&#xff0c;最近确实太忙了。 Viterbi算法 在完成前向训练部分后&#xff0c;需要实现解码部分。这里我们选择适合求解…

Android Gantt View 安卓实现项目甘特图

需要做一个项目管理工具&#xff0c;其中使用到了甘特图。发现全网甘特图解决方案比较少&#xff0c;于是自动动手丰衣足食。 前面我用 Python和 Node.js 前端都做过&#xff0c;这次仅仅是移植到 Android上面。 其实甘特图非常简单&#xff0c;开发也不难&#xff0c;如果我…

PCL从理解到应用【04】Octree 原理分析 | 案例分析 | 代码实现

前言 Octree 作为一种高效的空间分割数据结构&#xff0c;具有重要的应用价值。 本文将深入分析 Octree 的原理&#xff0c;通过多个实际案例帮助读者全面理解其功能和应用&#xff0c;包括最近邻搜索、半径搜索、盒子搜索以及点云压缩&#xff08;体素化&#xff09;。 特性…

MongoDB - 查询操作符:比较查询、逻辑查询、元素查询、数组查询

文章目录 1. 构造数据2. MongoDB 比较查询操作符1. $eq 等于1.1 等于指定值1.2 嵌入式文档中的字段等于某个值1.3 数组元素等于某个值1.4 数组元素等于数组值 2. $ne 不等于3. $gt 大于3.1 匹配文档字段3.2 根据嵌入式文档字段执行更新 4. $gte 大于等于5. $lt 小于6. $lte 小于…

(Vue+SpringBoot+elementUi+WangEditer)仿论坛项目

项目使用到的技术与库 1.前端 Vue2 elementUi Cookie WangEditer 2.后端 SpringBoot Mybatis-Plus 3.数据库 MySql 一、效果展示 1.1主页效果&#xff1a; 1.2 文章编辑页面&#xff1a; 1.3 成功发布文章 1.4 文章关键字搜索提示 1.5 文章查询结果展示 1.6 文章内容及交互展示…

统信UOS服务器操作系统离线安装postgresql数据库

原文链接&#xff1a;统信UOS服务器离线安装postgresql数据库 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于在统信UOS服务器操作系统上离线安装PostgreSQL数据库的文章。PostgreSQL是一款功能强大的开源对象-关系型数据库管理系统。由于某些环境中无法直接访问…

免费开源的工业物联网(IoT)解决方案

什么是 IoT&#xff1f; 物联网 (IoT) 是指由实体设备、车辆、电器和其他实体对象组成的网络&#xff0c;这些实体对象内嵌传感器、软件和网络连接&#xff0c;可以收集和共享数据。 IoT 设备&#xff08;也称为“智能对象”&#xff09;范围广泛&#xff0c;包括智能恒温器等…

SpringBoot+Vue(2)excel后台管理页面

一、需求 SpringBootVue写excel后台管理页面&#xff08;二级页面打开展示每一个excel表&#xff0c;数据库存储字段为“下载、删除、文件详情、是否共享、共享详情”&#xff09; 二、解答 后端(Spring Boot) 1. 项目设置 使用Spring Initializr创建一个新的Spring Boot项目…

深入理解 Elasticsearch 分页技术

原文链接&#xff1a;https://zhuanlan.zhihu.com/p/609576187 Elasticsearch 是一款分布式的搜索引擎&#xff0c;提供了灵活的分页技术。本文主要介绍 Elasticsearch&#xff08;简称 ES&#xff09; 的几种分页技术&#xff0c;并深入分析各种分页技术的优缺点及应用场景。 …

基于AT89C51单片机篮球计时计分器的设计(含文档、源码与proteus仿真,以及系统详细介绍)

本篇文章论述的是基于AT89C51单片机篮球计时计分器的设计的详情介绍&#xff0c;如果对您有帮助的话&#xff0c;还请关注一下哦&#xff0c;如果有资源方面的需要可以联系我。 目录 绪论 原理图 ​编辑 仿真图 系统总体设计图 代码实现 系统论文 资源下载 绪论 本次…

内网服务器通过squid代理访问外网

一、背景 现在要对172.16.58.158服务器进行openssh升级操作,我用之前写好的升级脚本执行后,发现没有备份旧的ssh程序文件,然后还卸载了oenssl-devel,然后我发现其他服务器ssh该服务器失败。同时脚本执行时报错“ configure: error: *** zlib.h missing - please install first …

windows查看局域网所有设备ip

windows如何查看局域网所有设备ip 操作方法 一 . 在搜索栏里输入cmd 二 .在命令行黑窗口输入arp -a 三 . 最上面显示的动态地址就是所有设备ip

day20、21、22补卡

235. 二叉搜索树的最近公共祖先 这道题的解题思路&#xff0c;我想了一会都没想出来&#xff0c;看了题解想&#xff1a;对于二叉搜索树&#xff0c;当我们从上向下去递归遍历&#xff0c;第一次遇到 cur节点是数值在[q, p]区间中&#xff0c;那么cur就是 q和p的最近公共祖先。…