当前位置: 首页 > 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;正引领着运维管理的新趋势。数字免疫系统和智能运维都借助大数据运…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用

在工业制造领域&#xff0c;无损检测&#xff08;NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统&#xff0c;以非接触式光学麦克风技术为核心&#xff0c;打破传统检测瓶颈&#xff0c;为半导体、航空航天、汽车制造等行业提供了高灵敏…...

react-pdf(pdfjs-dist)如何兼容老浏览器(chrome 49)

之前都是使用react-pdf来渲染pdf文件&#xff0c;这次有个需求是要兼容xp环境&#xff0c;xp上chrome最高支持到49&#xff0c;虽然说iframe或者embed都可以实现预览pdf&#xff0c;但为了后续的定制化需求&#xff0c;还是需要使用js库来渲染。 chrome 49测试环境 能用的测试…...

生产管理系统开发:专业软件开发公司的实践与思考

生产管理系统开发的关键点 在当前制造业智能化升级的转型背景下&#xff0c;生产管理系统开发正逐步成为企业优化生产流程的重要技术手段。不同行业、不同规模的企业在推进生产管理数字化转型过程中&#xff0c;面临的挑战存在显著差异。本文结合具体实践案例&#xff0c;分析…...