日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java / Cloud:如何快速创建支持Kubernetes的REST微服务

發(fā)布時間:2023/12/3 java 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java / Cloud:如何快速创建支持Kubernetes的REST微服务 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

可以肯定地說,如今微服務與云的結(jié)合風靡一時。 微服務的開發(fā)比以往任何時候都多,從而導致應用程序部署數(shù)量增加。 在過去的十年中,開發(fā)了諸如Docker和Kubernetes之類的容器化和編排工具,從而使微服務模式真正易于采用。

本文將教您如何使用能夠與MySQL數(shù)據(jù)庫交互的公開REST API生成功能全面的微服務,并將其部署到本地Kubernetes集群。 這里的知識可以應用于幾乎任何數(shù)據(jù)庫類型,例如Oracle,SQL Server,DB2等。

如果您在本文中遇到麻煩,請隨時參考源代碼的最終版本,該最終版本可在此GitHub存儲庫中找到。

速度是關鍵

作為開發(fā)人員,我們在日常工作中力爭的一件事就是縮短開發(fā)時間。

至此,我們已經(jīng)可以確定微服務的兩個方面,這將使我們的開發(fā)時間超出所需的時間:

  • 我們需要創(chuàng)建一個持久層
  • 我們需要公開一個REST API
  • 如果我要告訴您,存在一種可以處理這些事情而無需編寫任何代碼的工具,該怎么辦?

    Speedment是一個Java ORM工具包和運行時,旨在使開發(fā)人員能夠超快速地創(chuàng)建超快速的應用程序。 Speedment使用本地Java Streams API進行數(shù)據(jù)庫交互,因此對于新手,經(jīng)驗豐富的退伍軍人以及介于兩者之間的任何人都非常容易使用。 Speedment帶有圖形工具,使開發(fā)人員能夠在幾秒鐘內(nèi)生成其數(shù)據(jù)庫的Java表示。

    此外,Speedment的捆綁軟件系統(tǒng)使開發(fā)人員可以輕松擴展基本Toolkit的基本功能。 Spring插件就是這種增強功能之一,它使開發(fā)人員能夠生成功能齊全的CRUD REST API,以便與他們的數(shù)據(jù)庫進行交互。

    在本文的其余部分,您將學習如何使用Speedment Tool生成有效的REST微服務并將其部署到Kubernetes集群。 如果您總體上對Speedment感興趣,可以在在線手冊中找到帶有示例的詳細文檔。

    入門

    通過Maven分發(fā),Speedment是免費安裝的,但需要Java 8或更高版本。 首先,請轉(zhuǎn)到Speedment Initializer ,在這里您將能夠下載具有創(chuàng)建微服務所需的所有依賴項的項目模板。 這些是我們將在示例中使用的設置:

    如果您的設置不同,例如數(shù)據(jù)庫不同,請確保在初始化程序中應用適當?shù)母摹?

    完成項目配置后,單擊“下載”按鈕并解壓縮下載的zip文件。 要啟動Speedment Tool,請從終端執(zhí)行以下命令:
    mvn speedment:tool
    如果這是您第一次運行Speedment Tool,則會要求您連接到數(shù)據(jù)庫。 我們正在運行香草MySQL
    我們本地計算機上的Sakila示例數(shù)據(jù)庫 ,因此auth信息如下所示:

    填寫必填字段后,單擊“連接”按鈕。 如果您提供的身份驗證信息正確,則會顯示以下屏幕:

    生成微服務

    通過Speedment Tool連接到數(shù)據(jù)庫后,即可開始配置可用的各種選項。 您可以使用許多選項,但是出于本文的目的,我們將重點介紹公開REST API所需的選項。

    要啟用REST API生成,請在樹視圖中單擊“項目”節(jié)點,然后選中“啟用REST”選項:

    我們還啟用了“生成REST文檔”選項,以自動為我們的REST API生成OpenAPI文檔。 此選項不是強制性的,但最終使我們可以更輕松地測試API。

    下一步是可選的,但它將使我們的REST路由在美學上更具吸引力。 轉(zhuǎn)到樹視圖中的數(shù)據(jù)庫架構(gòu)節(jié)點,然后將REST Endpoint的值設置為斜杠(/)。 默認情況下,架構(gòu)名稱包含在生成的REST路由中,此修改會將其刪除。

    接下來,我們將為下表啟用REST控制器的生成:

    • 演員
    • 類別
    • 顧客
    • 電影
    • 員工
    • 商店

    無論使用哪個表格,啟用控制器生成的步驟都是相同的。 因此,我們僅在Actor表上進行演示。

    單擊樹視圖中的Actor表,并啟用Generate @RestController選項。 反過來,這將為該表啟用幾個與REST相關的選項。 您應該啟用的我們感興趣的選項是:

    • REST啟用清單
    • REST啟用GET
    • REST啟用創(chuàng)建
    • REST啟用更新
    • REST啟用DELETE

    我們還將REST端點從/ actor重命名為/ actors(同樣僅出于美觀目的)。 默認情況下,REST端點的名稱與其關聯(lián)的表相同。 在我們的例子中,重命名是有道理的,因為當我們訪問/ actors端點時,將檢索參與者列表,而不是單個參與者。

    繼續(xù)并對上面列出的其他表重復這些步驟。 完成后,單擊“生成”按鈕。 這將生成數(shù)據(jù)庫的Java表示以及必要的REST配置和控制器。

    運行微服務

    如果我們現(xiàn)在就按原樣運行應用程序,則很有可能會崩潰。 這是因為我們尚未指定應用程序用于連接數(shù)據(jù)庫的密碼。

    當我們生成應用程序時,暴露了許多特定于Speedment的應用程序?qū)傩浴?其中一個屬性就是spring.speedment.password屬性,我們可以使用它來設置Speedment連接到數(shù)據(jù)庫所使用的密碼。

    有兩種方法可以指定應用程序?qū)傩浴?我們將在application.properties文件中定義它們,您應該在應用程序的resources文件夾中創(chuàng)建該文件。

    這是我們的application.properties文件的樣子:

    #應用程序?qū)傩晕募C START

    spring.application.name =速度彈簧應用

    spring.speedment.password = sakila

    #應用程序?qū)傩晕募C END

    Sakila數(shù)據(jù)庫的默認密碼是sakila,但是如果您的數(shù)據(jù)庫使用不同的密碼,請確保這些更改反映在application.properties文件中。

    完成所有配置后,即可運行應用程序。 這是通過從項目的根文件夾執(zhí)行以下命令來完成的:
    mvn spring-boot:run

    如果啟用了“生成REST文檔”選項,則可以訪問
    http:// localhost:8080 / swagger-ui.html訪問REST API文檔:

    您可以手動執(zhí)行請求,也可以直接從Swagger UI執(zhí)行請求。 如果要在瀏覽器中訪問http:// localhost:8080 / actors ,我們將獲得一個JSON響應,其中包含存儲在數(shù)據(jù)庫中的actor列表:

    [ { "actorId": 1, "firstName": "PENELOPE", "lastName": "GUINESS" }, { "actorId": 2, "firstName": "NICK", "lastName": "WAHLBERG" }, { "actorId": 3, "firstName": "ED", "lastName": "CHASE" }, ... TRUNCATED ... ]

    部署前

    在開始微服務的部署過程之前,請確保您在本地計算機上安裝了以下依賴項:Docker,kubectl,Minikube和Skaffold。

    Docker化我們的微服務

    在將微服務實際部署到Kubernetes集群之前,我們需要將其轉(zhuǎn)換為Kubernetes可以實際使用的格式。 Kubernetes是一個容器編排工具,因此Docker就是在這里幫助我們進行容器創(chuàng)建過程的。

    在項目的根目錄中,創(chuàng)建一個包含以下內(nèi)容的Dockerfile:

    FROM openjdk:11-slim-buster EXPOSE 8080 ARG JAR_LOCATION=target ARG JAR_NAME=speedment-spring-app ARG JAR_VERSION=1.0.0 ADD ${JAR_LOCATION}/${JAR_NAME}-${JAR_VERSION}.jar app.jar ENTRYPOINT ["java", "-jar", "app.jar", "--spring.speedment.host=sakila"]

    導出的參數(shù)(JAR_LOCATION,JAR_NAME,JAR_VERSION)對于您的項目可能有所不同,具體取決于您在pom.xml文件中提供的信息。 在項目的根目錄中,執(zhí)行以下命令:


    mvn install

    這將使用包含您的微服務的JAR文件創(chuàng)建一個目標文件夾。 確保文件的名稱和版本與您放入Dockerfile中的信息匹配。

    創(chuàng)建部署配置

    我們將向Kubernetes集群部署兩個映像:Sakila數(shù)據(jù)庫和微服務。 Sakila數(shù)據(jù)庫已經(jīng)有一個公開可用的Docker映像:restsql / mysql-sakila。 但是,我們需要為微服務構(gòu)建映像。 這是我們之前創(chuàng)建的Dockerfile派上用場的地方。 稍后,我們將使用一個名為Skaffold的工具為我們的微服務創(chuàng)建映像,并將其在部署過程中使用。

    首先在項目的根目錄中創(chuàng)建一個名為k8s的文件夾。 您將在這里存儲所有的Kubernetes 部署和服務配置。 我們將微服務和數(shù)據(jù)庫配置分開,因此在k8s文件夾中創(chuàng)建兩個名為storage和app的文件夾。

    現(xiàn)在,我們繼續(xù)進行Sakila數(shù)據(jù)庫的配置。 在存儲文件夾中,我們將創(chuàng)建兩個YAML文件– sakila-deployment.yml和sakila-service.yml。 sakila-deployment.yml文件將存儲我們對Sakila數(shù)據(jù)庫的部署配置。 由于這不是Kubernetes教程,因此我們僅提供最終配置。 這是sakila-deployment.yml文件的最終外觀:

    apiVersion: apps/v1 kind: Deployment metadata: name: sakila labels: storage: sakila spec: replicas: 1 selector: matchLabels: storage: sakila template: metadata: labels: storage: sakila spec: containers: - name: sakila image: restsql/mysql-sakila ports: - containerPort: 3306

    這是最終的sakila-service.yml文件:

    apiVersion: v1 kind: Service metadata: name: sakila labels: storage: sakila spec: selector: storage: sakila ports: - name: database port: 3306 targetPort: 3306

    我們的微服務的部署和服務配置幾乎相同。 在app文件夾中,創(chuàng)建一個名為speedment-spring-app-deployment.yml的YAML文件,其內(nèi)容如下:

    apiVersion: apps/v1 kind: Deployment metadata: name: speedment-spring-app labels: app: speedment-spring-app spec: replicas: 1 selector: matchLabels: app: speedment-spring-app template: metadata: labels: app: speedment-spring-app spec: containers: - name: speedment-spring-app image: speedment-spring-app-example ports: - containerPort: 8080

    在同一文件夾中,創(chuàng)建另一個名為speedment-spring-app-service.yml的YAML文件,其內(nèi)容如下:

    apiVersion: v1 kind: Service metadata: name: speedment-spring-app spec: selector: app: speedment-spring-app ports: - name: http port: 8080 targetPort: 8080 type: NodePort

    這些是我們部署數(shù)據(jù)庫和應用程序所需的所有配置。 添加部署配置后,我們的文件結(jié)構(gòu)應如下所示:

    啟動集群

    部署的準備工作幾乎完成了。 我們需要做的最后一件事–啟動本地Kubernetes集群。 這是通過執(zhí)行以下命令來完成的:
    minikube start

    部署

    為了部署我們的數(shù)據(jù)庫和應用程序,我們將使用Skaffold。 在項目的根目錄中,創(chuàng)建一個名為skaffold.yml的文件,其中包含以下內(nèi)容:

    apiVersion: skaffold/v2alpha3 kind: Config build: artifacts: - image: speedment-spring-app-example docker: dockerfile: Dockerfile deploy: kubectl: manifests: - k8s/app/* - k8s/storage/*

    完成此文件后,我們終于可以進行部署了。 在項目根目錄中,執(zhí)行以下命令:
    skaffold dev --port-forward=true

    當我們執(zhí)行此命令時,將發(fā)生兩件事:

  • 將從我們之前創(chuàng)建的Dockerfile創(chuàng)建一個Docker映像
  • 部署和服務將根據(jù)我們之前創(chuàng)建的配置進行創(chuàng)建
  • 微服務啟動后,就可以像以前一樣使用它。 現(xiàn)在唯一的區(qū)別是它是從Kubernetes集群運行的。

    注意: Sakila數(shù)據(jù)庫完全啟動大約需要30-60秒。 由于我們的應用程序啟動速度比Sakila數(shù)據(jù)庫快得多,因此它很可能崩潰并在數(shù)據(jù)庫準備就緒之前重新啟動幾次。

    摘要

    以省時的方式創(chuàng)建應用程序有時可能很困難。 我們已經(jīng)解釋了如何從數(shù)據(jù)庫生成微服務并將其部署到Kubernetes集群,因此希望您已經(jīng)學到了一些可以減少開發(fā)時間的知識。

    我們希望您喜歡閱讀本文并喜歡撰寫本文。 可以找到本文源代碼的最終版本
    在這里 。

    s

    Per Minborg

    米斯拉夫·米利切維奇(MislavMili?evi?)

    資源資源

    Speedment Initializer能夠生成項目模板

    GitHub上的Speedment OpenSource
    加速在線手冊
    Github倉庫以及最終版本的源代碼

    Sakila示例數(shù)據(jù)庫

    翻譯自: https://www.javacodegeeks.com/2020/04/java-cloud-how-to-quickly-create-a-kubernetes-ready-rest-microservice.html

    總結(jié)

    以上是生活随笔為你收集整理的Java / Cloud:如何快速创建支持Kubernetes的REST微服务的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。