Kotlin Misk Web框架

Kotlin Misk Web框架

  • 1 添加依赖
    • 1.1 build.gradle.kts
    • 1.2 settings.gradle.kts
    • 1.3 gradle.properties
  • 2 请求接口
  • 3 程序模块
  • 4 主服务类
  • 5 测试结果

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提供安全相关的功能,包括认证和授权

1 添加依赖

1.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)
}

1.2 settings.gradle.kts

plugins {id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0"
}rootProject.name = "misk-test"

1.3 gradle.properties

kotlin.code.style=official

2 请求接口

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);}

3 程序模块

package com.xuimport com.xu.action.HelloWebAction
import misk.inject.KAbstractModule
import misk.web.WebActionModuleclass HelloWorldModule : KAbstractModule() {override fun configure() {install(WebActionModule.create<HelloWebAction>())}}

4 主服务类

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)
}

5 测试结果

Get请求
Post请求

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

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

相关文章

UGC与AI引领的下一个10年,丝芭传媒已经准备好

丝芭传媒最近传来的消息&#xff0c;都跟技术相关。 基于自研AI大模型“Paro&#xff08;心乐舞河&#xff09;”的AIGPT及AIGC生成工具APP“鹦鹉人”开启用户内测。2023年3月技术测试的图形化智能社交基座“美踏元宇宙”&#xff0c;也将开放首轮用户内测。 此外&#xff0c…

Vue 3中 watch 和 watchEffect的区别?

​ 在 Vue 3 中&#xff0c;响应式系统允许我们声明性的绑定数据和 DOM&#xff0c;当数据变化时&#xff0c;DOM 也会自动更新。为了实现这一点&#xff0c;Vue 提供了特殊的 API&#xff0c;其中包括 reactive 和 ref&#xff0c;用于分别创建响应式对象和响应式基本类型值。…

【linux】log 保存和过滤

log 保存 ./run.sh 2>&1 | tee -a /home/name/log.txt log 过滤 import os import re# Expanded regular expression to match a wider range of error patterns error_patterns re.compile(# r(error|exception|traceback|fail|failed|fatal|critical|warn|warning…

notes for datawhale 2th summer camp NLP task1

//I wrote this note in obsidian and copied it here. The strange format in this note is due to lack of obsidian plugins. tags: AI-studyML status: done 目标&#xff1a;跑通baseline&#xff0c;体验NLP模型解决问题的流程&#xff0c;基本了解赛题要求&#xff0c;…

Studying-代码随想录训练营day31| 56.合并区间、738.单调递增的数字、968.监控二叉树、贪心算法总结

第31天&#xff0c;贪心最后一节(ง •_•)ง&#x1f4aa;&#xff0c;编程语言&#xff1a;C 目录 56.合并区间 738.单调递增的数字 968.监控二叉树 贪心算法总结 56.合并区间 文档讲解&#xff1a;代码随想录合并区间 视频讲解&#xff1a;手撕合并区间 题目&#xf…

高效图纸管理:彩虹图纸管理软件助您一臂之力

高效图纸管理&#xff1a;彩虹图纸管理软件助您一臂之力 在制造业的激烈竞争中&#xff0c;高效图纸管理是企业提升竞争力和降低成本的关键。然而&#xff0c;传统的图纸管理方式往往存在效率低下、信息混乱等问题。此时&#xff0c;彩虹图纸管理软件凭借其卓越的性能和丰富的功…

一个vue页面复用方案

前言 问大家一个问题&#xff0c;曾经的你是否也遇到过&#xff0c;一个项目中有好几个页面长得基本相同&#xff0c;但又差那么一点&#xff0c;想用 vue extends 继承它又不能按需继承html模板部分&#xff0c;恰好 B 页面需要用的 A 页面 80% 的模板&#xff0c;剩下的 20%…

【验收支撑】软件系统验收计划书(直接套用原件doc)

编写软件验收计划是软件开发过程中的一个关键步骤&#xff0c;其重要性体现在以下几个方面&#xff1a; 明确验收标准&#xff1a;软件验收计划详细列出了验收的标准、测试方法、测试环境等&#xff0c;确保所有相关人员对验收的期望和要求有清晰的认识。这有助于避免在验收阶段…

力扣---40. 组合总和 II

给定一个候选人编号的集合 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意&#xff1a;解集不能包含重复的组合。 示例 1: 输入: candidates [10,1,2,7,6…

triton需要cuda11.8版本--so 安装个11.8的cuda

1.安装一个11.8的cuda 查看ubunto版本 lsb_release -a查看cpu架构 uname -m到官网得到相应的命令&#xff1a;CUDA Toolkit Archive | NVIDIA Developer 依次输入两条命令。如果没有没有sudo权限就将cuda安装路径修改在自己目录下&#xff1a; sh cuda_11.8.0_520.61.05_li…

论文AIGC率超标?一键降重快速搞定

如何有效降低AIGC论文的重复率&#xff0c;也就是我们说的aigc如何降重&#xff1f;AIGC疑似度过高确实是个比较愁人的问题。如果你用AI帮忙写了论文&#xff0c;就一定要在交稿之前做一下AIGC降重的检查。一般来说&#xff0c;如果论文的AIGC超过30%&#xff0c;很可能会被判定…

linux内核中创建进程和线程做了什么工作?

linux中fork可以用于创建一个子进程&#xff0c;fork和excv系统调用可以创建一个新的进程。 clone系统调用也可以创建进程。 本实验探究fork()和pthread_create()在linux内核中分别调用了什么函数。 首先 看一下linux内核在执行fork()的时候底层的系统调用 #include <sys…

【EI征稿】第四届机器人、自动化与智能控制国际会议

【快速通道】 参会方式&#xff1a;担任会议committee成员、组建workshop 、参会报告、参会交流、审稿专家、投稿参会。 会议地点&#xff1a; 湖南 长沙 会议时间&#xff1a;12月6日-9日 会议检索&#xff1a;EI检索 会议官网&#xff1a;https://www.icraic.org/ 投稿链接&a…

华为910b推理Qwen1.5-72b

前情提要&#xff1a;华为910b部署训练推理大模型&#xff0c;本人之前并没有接触过&#xff0c;所以&#xff0c;写此文档进行记录。 &#xff08;注意&#xff1a;版本适配很重要&#xff01;&#xff01;不然就像我一样走了好多坑~~~&#xff09; 首先&#xff0c;看一张图…

数学基础 -- 求解微分问题之乘法法则、商法则和链式求导法则

微分求解问题之乘法法则、商法则和链式求导法则 微分求解问题常用的三个基本法则是乘积法则、商法则和链式求导法则。下面是它们的公式和一些例子&#xff1a; 乘积法则 乘积法则用于求两个函数的乘积的导数。假设 u ( x ) u(x) u(x) 和 v ( x ) v(x) v(x) 是两个可微函数…

大鲸鱼—docker 基本概念及安装使用

目录 一、docker前言 1.什么是Docker&#xff1f; 2.Docker的宗旨 3.容器的优点 4.Docker与虚拟机的区别 5.Docker核心概念 镜像 容器 仓库 6.为什么要用容器 7.容器越来越受欢迎的原因 8.容器在内核中支持2种重要技术 二、Docker安装 三、Docker 镜像操作 1.搜…

旷视AI开源新突破:上传照片即可生成表情包视频!

日前&#xff0c;旷视科技发布了一项新的开源AI人像视频生成框架——MegActor。该框架让用户只需输入一张静态肖像图片和一段视频&#xff08;如演讲、表情包、rap&#xff09;&#xff0c;便可生成一段表情丰富、动作一致的AI人像视频。生成的视频长度取决于输入的视频长度。与…

API接口详解及其在电子商务中的应用研究

目录 引言 一、API接口概述 1.1 API接口定义 1.2 API接口的作用 二、API接口分类 2.1 根据使用对象分类 2.2 根据协议和数据格式分类 三、API接口设计原则 四、API接口在电子商务中的应用 4.1 数据交换与集成 4.2 个性化推荐与营销 4.3 库存管理与订单处理 4.4 数…

C++ 数据结构探索:构建高效程序的基础

C 数据结构探索&#xff1a;构建高效程序的基础 在C编程的广阔领域中&#xff0c;数据结构是理解和实现高效、可维护程序的核心。数据结构是计算机存储、组织数据的方式&#xff0c;它们使得数据访问和修改操作更加高效。本文将带您走进C中几种常见且重要的数据结构&#xff0…

数据湖仓一体(一) 编译hudi

目录 一、大数据组件版本信息 二、数据湖仓架构 三、数据湖仓组件部署规划 四、编译hudi 一、大数据组件版本信息 hudi-0.14.1zookeeper-3.5.7seatunnel-2.3.4kafka_2.12-3.5.2hadoop-3.3.5mysql-5.7.28apache-hive-3.1.3spark-3.3.1flink-1.17.2apache-dolphinscheduler-3.1.9…