当前位置: 首页 > news >正文

使用 Apache Camel 和 Quarkus 的微服务(五)

【squids.cn】 全网zui低价RDS,免费的迁移工具DBMotion、数据库备份工具DBTwin、SQL开发工具等

在本系列的第三部分中,我们了解了如何在 Minikube 中部署基于 Quarkus/Camel 的微服务,这是最常用的 Kubernetes 本地实现之一。虽然这样的本地 Kubernetes 实现对于测试目的非常实用,但其单节点功能并不能满足实际生产环境的要求。因此,为了在类似生产的环境中检查我们的微服务行为,我们需要多节点 Kubernetes 实现。最常见的一种是 OpenShift。

什么是 OpenShift?

OpenShift 是一个基于 Kubernetes 的开源企业级容器应用程序开发、部署和管理平台。它由红帽开发,作为 Kubernetes 集群之上的组件层,既可以作为商业产品,也可以作为免费平台,或者既可以作为本地基础设施,也可以作为云基础设施。下图描绘了这种架构。

与任何 Kubernetes 实施一样,OpenShift 也有其复杂性,将其安装为独立的本地平台并非易事。将其用作 AWS、Azure 或 GCP 等专用云上的托管平台是一种更实用的方法,至少在开始时是这样,但它需要一定的企业组织。

例如,ROSA(Red Hat OpenShift Service on AWS)是一种商业解决方案,有助于快速创建和简单管理完整的 Kubernetes 基础设施,但它并不是一个真正适合开发人员的环境,允许其快速开发、部署和管理。测试云原生服务。

对于后面的用例,红帽提供了 OpenShift Developer's Sandbox,这是一个开发环境,无需任何繁重的安装或订阅过程即可立即访问 OpenShift,开发人员甚至可以在开始实际项目之前就开始练习他们的技能和学习周期。这项完全免费的服务不需要任何信用卡,只需要一个 Red Hat 帐户,在共享的多租户 Kubernetes 集群中提供私有 OpenShift 环境,该集群预先配置了一组开发人员工具,例如 Java、Node .js、Python、Go、C#,包括 Helm 图表目录、s2i 构建工具和 OpenShift Dev Spaces。

在这篇文章中,我们将使用 OpenShift Developer's Sandbox 来部署 Quarkus/Camel 微服务。

在 OpenShift 上部署

为了在 OpenShift 上部署,Quarkus 应用程序需要包含 OpenShift 扩展。当然,这可以使用 Qurakus CLI 来完成,但考虑到我们的项目是一个多模块 Maven 项目,一种更实用的方法是直接在主 POM 中包含以下依赖项:

<dependency>  <groupId>io.quarkus</groupId>  <artifactId>quarkus-openshift</artifactId></dependency><dependency>  <groupId>io.quarkus</groupId>  <artifactId>quarkus-container-image-openshift</artifactId></dependency>

这样,所有子模块都将继承这些依赖项。

OpenShift应该与普通的Kubernetes资源一起工作;因此,我们先前的方案,在我们将微服务部署到Minikube上时,也应该在这里适用。毕竟,Minikube和OpenShift都是同一个事实上的标准:Kubernetes的实现。

如果我们回顾本系列的第三部分,我们基于Jib的构建和部署过程生成了普通的Kubernetes清单文件(kubernetes.yaml)以及Minikube的文件(minikube.yaml)。然后,我们可以选择使用普通生成的Kubernetes资源还是更具体的Minikube资源,我们更喜欢后者。尽管专为Minikube定制的清单文件只能在Minikube上部署,但普通的Kubernetes文件应该在Minikube上以及任何其他Kubernetes实现(如OpenShift)上都能以相同的方式工作。

然而,实际上,情况稍微复杂一些,据我所知,我未能成功地将由Jib生成的普通Kubernetes清单部署到OpenShift上。我需要做的是重命名大多数其名称满足quarkus.kubernetes.模式的属性为quarkus.openshift.。此外,某些普通的Kubernetes属性,例如quarkus.kubernetes.ingress.expose,对于OpenShift有一个完全不同的名称。在这种情况下是quarkus.openshift.route.expose。

但除了这些几乎是美观的改变外,一切都与我们第三部分的前一个方案保持在同一个位置。现在,为了在OpenShift Developer's Sandbox上部署我们的微服务,请按照以下步骤操作。

登录 OpenShift 开发者沙盒

以下是登录 OpenShift Developer Sandbox 所需的步骤:

  1. 启动您首选的浏览器并访问 OpenShift Developer's Sandbox站点

  2. 单击Login右上角的链接(您需要已经注册了 OpenShift Developer Sandbox)

  3. 单击Start your sandbox for free屏幕中央标记的红色按钮

  4. 在右上角,展开您的用户名并单击Copy login command按钮

  5. 在标有标签的新对话框中Log in with ...单击DevSandbox链接

  6. 将显示一个新页面,其中带有标记为 的链接Display Token。单击此链接。

  7. 复制并执行显示的oc命令,例如:

$ oc login --token=... --server=https://api.sandbox-m3.1530.p1.openshiftapps.com:6443

从 GitHub 克隆项目

以下是克隆项目的 GitHub 存储库所需的步骤:​​​​​​​

$ git clone https://github.com/nicolasduminil/aws-camelk.git$ cd aws-camelk$ git checkout openshift

创建 OpenShift Secret

为了连接到 AWS 资源,例如 S3 存储桶和 SQS 队列,我们需要提供 AWS 凭证。这些凭证是访问密钥 ID 和秘密访问密钥。有多种方法可以提供这些凭据,但在这里,我们选择使用 Kubernetes 密钥。以下是所需的步骤:

首先,将您的访问密钥 ID 和秘密访问密钥编码为 Base64,如下所示:​​​​​​​

$ echo -n <your AWS access key ID> | base64$ echo -n <your AWS secret access key> | base64

编辑文件aws-secret.yaml并修改以下行,以便替换...为 Base64 编码值:​​​​​​​

AWS_ACCESS_KEY_ID: ...AWS_SECRET_ACCESS_KEY: ...

创建包含 AWS 访问密钥 ID 和秘密访问密钥的 OpenShift 密钥:

$ kubectl apply -f aws-secret.yaml

启动微服务

为了启动微服务,请运行以下脚本:

$ ./start-ms.sh

该脚本与我们之前第三部分中的脚本相同:​​​​​​​

#!/bin/sh./delete-all-buckets.sh./create-queue.shsleep 10mvn -DskipTests -Dquarkus.kubernetes.deploy=true clean installsleep 3./copy-xml-file.sh

此处用于触发 Camel 文件轮询器的 copy-xml-file.sh 脚本已稍作修改:


#!/bin/sh
aws_camel_file_pod=$(oc get pods | grep aws-camel-file | grep -wv -e build -e deploy | awk '{print $1}')
cat aws-camelk-model/src/main/resources/xml/money-transfers.xml | oc exec -i $aws_camel_file_pod -- sh -c "cat > /tmp/input/money-transfers.xml"

在这里,我们kubectl用命令替换了oc命令。此外,鉴于 OpenShift 具有不仅为微服务而且为构建和部署命令创建 pod 的特殊性,我们需要在正在运行的 pod 列表中过滤掉出现字符串 和 的buildpod deploy。

运行此脚本可能需要一些时间。完成后,确保所有必需的 OpenShift 控制器正在运行:


$ oc get is
NAME              IMAGE REPOSITORY                                                                                                      TAGS                                                       UPDATED
aws-camel-file    default-route-openshift-image-registry.apps.sandbox-m3.1530.p1.openshiftapps.com/nicolasduminil-dev/aws-camel-file    1.0.0-SNAPSHOT                                             17 minutes ago
aws-camel-jaxrs   default-route-openshift-image-registry.apps.sandbox-m3.1530.p1.openshiftapps.com/nicolasduminil-dev/aws-camel-jaxrs   1.0.0-SNAPSHOT                                             9 minutes ago
aws-camel-s3      default-route-openshift-image-registry.apps.sandbox-m3.1530.p1.openshiftapps.com/nicolasduminil-dev/aws-camel-s3      1.0.0-SNAPSHOT                                             16 minutes ago
aws-camel-sqs     default-route-openshift-image-registry.apps.sandbox-m3.1530.p1.openshiftapps.com/nicolasduminil-dev/aws-camel-sqs     1.0.0-SNAPSHOT                                             13 minutes ago
openjdk-11        default-route-openshift-image-registry.apps.sandbox-m3.1530.p1.openshiftapps.com/nicolasduminil-dev/openjdk-11        1.10,1.10-1,1.10-1-source,1.10-1.1634738701 + 46 more...   18 minutes ago
$ oc get pods
NAME                       READY   STATUS      RESTARTS   AGE
aws-camel-file-1-build     0/1     Completed   0          19m
aws-camel-file-1-d72w5     1/1     Running     0          18m
aws-camel-file-1-deploy    0/1     Completed   0          18m
aws-camel-jaxrs-1-build    0/1     Completed   0          14m
aws-camel-jaxrs-1-deploy   0/1     Completed   0          10m
aws-camel-jaxrs-1-pkf6n    1/1     Running     0          10m
aws-camel-s3-1-76sqz       1/1     Running     0          17m
aws-camel-s3-1-build       0/1     Completed   0          18m
aws-camel-s3-1-deploy      0/1     Completed   0          17m
aws-camel-sqs-1-build      0/1     Completed   0          17m
aws-camel-sqs-1-deploy     0/1     Completed   0          14m
aws-camel-sqs-1-jlgkp      1/1     Running     0          14m
oc get svc
NAME                TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                               AGE
aws-camel-jaxrs     ClusterIP   172.30.192.74   <none>        80/TCP                                11m
modelmesh-serving   ClusterIP   None            <none>        8033/TCP,8008/TCP,8443/TCP,2112/TCP   18h

如上面的清单所示,所有必需的图像流都已创建,并且所有 Pod 都已完成或正在运行。已完成的 Pod 是与构建和部署操作相关的 Pod。正在运行的服务与微服务相关联。

只有一项服务正在运行:aws-camel-jaxrs。该服务可以aws-camel-jaxrs通过公开路由来与运行微服务的 Pod 进行通信。这是自动完成的,对财产有效quarkus.openshift.route.expose=true。aws-camel-sqs事实上,微服务需要与之通信aws-camel-sqs,因此需要知道通往它的路径。要获取该路由,您可以按照以下步骤操作:


$ oc get routes
NAME              HOST/PORT                                                                      PATH   SERVICES          PORT   TERMINATION   WILDCARD
aws-camel-jaxrs   aws-camel-jaxrs-nicolasduminil-dev.apps.sandbox-m3.1530.p1.openshiftapps.com          aws-camel-jaxrs   http                 None

现在打开application.properties与aws-camel-sqs微服务关联的文件并修改属性,rest-uri如下所示:

rest-uri=aws-camel-jaxrs-nicolasduminil-dev.apps.sandbox-m3.1530.p1.openshiftapps.com/xfer

在这里,您必须将命名空间替换nicolasduminil-dev为对您的情况有意义的值。现在,您需要停止微服务并再次启动它们:​​​​​​​

$ ./kill-ms.sh...$ ./start-ms.sh...

您的微服务现在应该按预期运行,您可以使用以下命令检查日志文件:

$ oc logs aws-camel-jaxrs-1-pkf6n

正如您所看到的,为了获得服务的路由aws-camel-jaxrs,我们需要启动、停止和再次启动我们的微服务。这个解决方案远非优雅,但我没有找到任何其他解决方案,我依靠建议的读者来帮助我改进它。可能可以使用 OpenShift Java 客户端在 Java 代码中执行与命令oc get routes执行的操作相同的操作,但我没有找到具体方法,而且文档也不太明确。

我想对无法在这里提供完整的解决方案表示歉意,但尽管如此,还是享受它吧!

作者:Nicolas Duminil

更多内容请关注公号【云原生数据库

squids.cn,云数据库RDS,迁移工具DBMotion,云备份DBTwin等数据库生态工具。

相关文章:

使用 Apache Camel 和 Quarkus 的微服务(五)

【squids.cn】 全网zui低价RDS&#xff0c;免费的迁移工具DBMotion、数据库备份工具DBTwin、SQL开发工具等 在本系列的第三部分中&#xff0c;我们了解了如何在 Minikube 中部署基于 Quarkus/Camel 的微服务&#xff0c;这是最常用的 Kubernetes 本地实现之一。虽然这样的本地…...

Ubuntu磁盘满了,导致黑屏

前言 &#xff08;1&#xff09;最近要玩Milk-V Duo&#xff0c;配置环境过程中&#xff0c;发现磁盘小了。于是退出虚拟机&#xff0c;扩大Ubuntu大小&#xff0c;重新开机&#xff0c;发现无法进入Ubuntu界面。 &#xff08;2&#xff09;查了很久&#xff0c;后面发现是磁盘…...

安装sklearn包错误解决以及 scikit-learn简介

安装sklearn包错误解决以及 scikit-learn简介 利用 pip install sklearn时出现错误 pip install sklearn Looking in indexes: https://mirrors.aliyun.com/pypi/simple/ Collecting sklearnUsing cached https://mirrors.aliyun.com/pypi/packages/b9/0e/b2a4cfaa9e12b9ca4…...

CSS点击切换或隐藏盒子的卷起、展开效果

<template><div class"main"><el-button click"onCllick">切换</el-button><transition name"slideDown"><div class"info" v-if"isShow">1111</div></transition></di…...

关于信息安全软考的一些记录1

1、网络信息安全的基本属性 机密性&#xff1a;网络信息不泄露给非授权的用户完整性&#xff1a;未经授权必能改的特性可用性&#xff1a;可以及时获取网络信息和服务的特性可控性&#xff1a;责任主体对网络信息系统具有管理、支配的能力【可管理、可支配】扛抵赖性&#xff…...

如何选择UMLChina服务

服务口号&#xff1a;聚焦最后一公里 斐力庇第斯从马拉松跑回雅典报信&#xff0c;虽然已是满身血迹、精疲力尽&#xff0c;但他知道&#xff1a;没有出现在雅典人民面前&#xff0c;前面的路程都是白费。 学到的知识如果不能最终【用】于您自己的项目之中&#xff0c;也同样是…...

关于信息安全软考的记录3

1、网络安全体系的特征 网络安全体系&#xff1a;网络安全保障系统的最高层概念抽象 特征内容整体性网络安全单元按照一定的规则&#xff0c;相互依赖、相互作用而形成人机物一体化的网络安全保护方式协同性通过各种安全机制的相互协作&#xff0c;构建系统性的网络安全保护方…...

API攻防-接口安全SOAPOpenAPIRESTful分类特征导入项目联动检测

文章目录 概述什么是接口&#xff1f; 1、API分类特征SOAP - WSDLWeb services 三种基本元素&#xff1a; OpenApi - Swagger UISpringboot Actuator 2、API检测流程Method&#xff1a;请求方法URL&#xff1a;唯一资源定位符Params&#xff1a;请求参数Authorization&#xff…...

【Docker 内核详解】namespace 资源隔离(二):UTS namespace IPC namespace

namespace 资源隔离&#xff08;二&#xff09;&#xff1a;UTS namespace & IPC namespace 1.UTS namespace UTS&#xff08;UNIX Time-sharing System&#xff09;&#xff0c;UTS namespace 提供了 主机名 和 域名 的隔离&#xff0c;这样每个 Docker 容器就可以拥有独…...

EOF() | BOF()相关题目解析

题目 设当前数据库有10条记录(记录未进行任何索引)&#xff0c;在下列3种情况下&#xff0c;当前记录号为1时&#xff1a;EOF()为真时&#xff1b;BOF()为真时&#xff0c;命令RECN()的结果分别是______。 A&#xff0e;1,11,1B&#xff0e;1,10,1C&#xff0e;1,11,0D&#xf…...

spring 注入 当有两个参数的时候 接上面

新加一个int 型的 age 记得写getset方法和构造方法 &#xff08;&#xff08;&#xff08;&#xff08;&#xff08;&#xff08;&#xff08; 构造方法的作用——无论是有参构造还是无参构造&#xff0c;他的作用都是为了方便为对象的属性初始化值 构造方法是一种特殊的方…...

博客文档续更

十、 博客前台模块-异常处理 目前我们的项目在认证出错或者权限不足的时候响应回来的Json&#xff0c;默认是使用Security官方提供的响应的格式&#xff0c;但是这种响应的格式肯定是不符合我们项目的接口规范的。所以需要自定义异常处理 我们需要去实现AuthenticationEntryP…...

OCR让点读笔如虎添翼

点读笔是一种智能学习工具&#xff0c;它可以通过识别文字来提供相应的语音或图像反馈。在实现文字识别功能时&#xff0c;点读笔通常会借助OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;技术。下面将详细介绍点读笔如何利用OCR技术实现文…...

棱镜七彩参编!开源领域4项团体标准正式发布

近日&#xff0c;中电标2023年第27号团体标准公告正式发布&#xff0c;《T/CESA 1270.2-2023 信息技术 开源治理 第 2 部分&#xff1a;企业治理评估模型》、《T/CESA 1270.3-2023 信息技术 开源治理 第 3 部分&#xff1a;社区治理框架》、《T/CESA 1270.5-2023 信息技术 开源…...

轻量级Composition

MEF&#xff0c;全称Managed Extensibility Framework&#xff08;托管可扩展框架&#xff09;。MEF是专门致力于解决扩展性问题的框架。MEF 位于 ComponentModel.Composition 程序集中&#xff0c;添加 System.ComponentModel.Composition 和 System.ComponentModel.Compositi…...

Vxlan网络和flannel记录

Vxlan 大二层网络&#xff0c;在三层网络中构建逻辑的2层网络 数据包经过vxlan隧道 用vni标识不同的vxlan网络&#xff08;类似于vlan的vid&#xff09; 通过vtep来封装和解封装&#xff0c;通过UDP传输 Flannel 分配子网和IP地址&#xff1a;Flannel为每个容器或虚拟机分配唯一…...

【已解决】微信小程序-苹果手机日期解析异常

在开发微信小程序时&#xff0c;使用了 uView 的 CountDown倒计时 组件和 uni.$u.timeFrom Api&#xff0c;后台传递了一个时间字符串&#xff0c;前台计算时间戳的差值&#xff0c;来显示还有多久开始&#xff0c;这个功能在模拟器和我自己手机&#xff08;iphon13&#xff09…...

Avalonia如何更改全局背景色

1.项目下载地址&#xff1a;https://gitee.com/confusedkitten/avalonia-demo 2.UI库Semi.Avalonia&#xff0c;项目地址 https://github.com/irihitech/Semi.Avalonia 3.ColorView&#xff0c;使用Semi.Avalonia.ColorPicker&#xff0c;Nuget获取就行 4.样式预览 以下是…...

万界星空科技低代码平台云MES系统功能场景

1、 工艺管理 生产工艺规程、岗位操作法、工艺卡片的编制。 生产过程的工艺条件、产品质量指标以及原材料消耗的执行检查、相关数据的统计分析。 2、 工序管理 对人、机、料、法控制&#xff0c;规定产品质量标准及有关完成方法的各项规程&#xff0c;并明确各道工序的管理负责…...

运维大数据平台的建设与实践探索

随着企业数字化转型的推进&#xff0c;运维管理面临着前所未有的挑战和机遇。为应对日益复杂且严峻的挑战&#xff0c;数字免疫系统和智能运维等概念应运而生。数字免疫系统和智能运维作为新兴技术&#xff0c;正引领着运维管理的新趋势。数字免疫系统和智能运维都借助大数据运…...

ESXi 重置密码详细攻略(全场景覆盖)

本文详细覆盖 ESXi 所有常见场景的密码重置方法&#xff0c;包括「知道原密码改新密码」「忘记root密码(无vCenter)」「有vCenter管理(企业版)」&#xff0c;步骤拆解到每一步点击和命令输入&#xff0c;适配 ESXi 5.x/6.x/7.x/8.x 全版本&#xff0c;兼顾官方支持方法和实用非…...

Python 3.14 JIT架构深度拆解(含官方未发布IR层流程图+Hot Code Path决策树)

第一章&#xff1a;Python 3.14 JIT编译器演进背景与设计哲学Python 长期以来以解释执行和动态灵活性著称&#xff0c;但性能瓶颈在数值计算、实时服务与高吞吐系统中日益凸显。CPython 解释器的字节码执行模型虽稳定可靠&#xff0c;却难以突破单线程 GIL 与逐指令解释带来的固…...

MusePublic圣光艺苑惊艳效果:大气照明+表达性纹理细节放大展示

MusePublic圣光艺苑惊艳效果&#xff1a;大气照明表达性纹理细节放大展示 1. 引言&#xff1a;当古典艺术遇见AI算力 想象一下&#xff0c;你走进一间19世纪的画室。空气中弥漫着亚麻籽油和矿物颜料的味道&#xff0c;阳光透过高窗洒在亚麻画布上&#xff0c;墙上挂着鎏金画框…...

Windows 11 + CUDA 12.1 保姆级教程:手把手搞定Detectron2环境搭建(含Git加速与权限避坑)

Windows 11 CUDA 12.1 终极指南&#xff1a;零障碍搭建Detectron2开发环境 RTX 40系显卡用户注意了&#xff01;如果你正在Windows 11上尝试搭建Detectron2开发环境&#xff0c;却苦于找不到针对CUDA 12.1的完整解决方案&#xff0c;这篇指南将为你扫清所有障碍。不同于网上那…...

终极英雄联盟工具集:3大核心功能让你轻松掌控游戏全局

终极英雄联盟工具集&#xff1a;3大核心功能让你轻松掌控游戏全局 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League-Toolkit…...

车载Java OTA升级崩溃率从18.7%降至0.3%:基于Delta Patch + 类隔离热修复的4步标准化流程

第一章&#xff1a;车载Java OTA升级崩溃率从18.7%降至0.3%&#xff1a;基于Delta Patch 类隔离热修复的4步标准化流程在车载嵌入式Java环境&#xff08;JVM 11&#xff0c;ART兼容层&#xff09;中&#xff0c;OTA升级引发的ClassCastException与NoClassDefFoundError曾导致高…...

[Python3高阶编程] - 异步编程深度学习指南二: 同步原语

概述在 Python 异步编程中&#xff0c;虽然协程&#xff08;coroutine&#xff09;天然避免了线程切换开销&#xff0c;但多个协程仍可能同时访问共享资源&#xff08;如全局变量、文件、数据库连接&#xff09;&#xff0c;从而引发竞态条件&#xff08;Race Condition&#x…...

云计算算力价格波动:行业重构与竞争新格局

云计算价格反转&#xff1a;从价格战到集体涨价2025年4月&#xff0c;阿里云率先发起价格战&#xff0c;京东云、腾讯云、华为云等纷纷跟进&#xff0c;“最高降幅达60%”的口号让行业陷入价格混战。然而&#xff0c;到了2026年3月&#xff0c;市场风向突变&#xff0c;谷歌云、…...

3大技术突破重新定义魔兽地图编辑工作流

3大技术突破重新定义魔兽地图编辑工作流 【免费下载链接】HiveWE A Warcraft III world editor. 项目地址: https://gitcode.com/gh_mirrors/hi/HiveWE 对于《魔兽争霸III》地图制作者而言&#xff0c;最令人沮丧的体验莫过于&#xff1a;精心设计的地形布局在实际测试中…...

什么是 AI Agent?它和直接调用大模型 API 做一次问答有什么本质区别?

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;AI大模型原理和应用面试题 文章目录一、&#x1f340;AI Agent概念、AI Agent和直接…...