用Vert.x适配华为云和GaussDB

举报
zhanwei 发表于 2024/11/22 16:16:40 2024/11/22
【摘要】 一、适配目的随着云计算和响应式编程技术的不断发展,越来越多的企业开始关注并应用这些技术。华为云作为国内领先的云服务提供商,拥有丰富的云产品和广泛的用户群体。Eclipse Vert.x作为一个高效的响应式应用程序构建工具包,在云计算和响应式编程领域具有广泛的应用前景。为了满足Vert.x用户在华为云上的使用需求,提高华为云的市场竞争力,我们决定对Eclipse Vert.x进行华为云适配。二...

一、适配目的

随着云计算和响应式编程技术的不断发展,越来越多的企业开始关注并应用这些技术。华为云作为国内领先的云服务提供商,拥有丰富的云产品和广泛的用户群体。Eclipse Vert.x作为一个高效的响应式应用程序构建工具包,在云计算和响应式编程领域具有广泛的应用前景。为了满足Vert.x用户在华为云上的使用需求,提高华为云的市场竞争力,我们决定对Eclipse Vert.x进行华为云适配。

二、适配任务分析

1、部署vert.x应用,启动服务

2、访问vert.x服务端口,同时将访问数据落入GaussDB数据库

3、验证访问数据是否入库。

二、适配过程

1、开发并部署Vert.x应用

验证使用https://github.com/apache/servicecomb-fence这个工程作为基础,在工程中引入Vert.x接入sdk:

    <dependency>
      <groupId>io.vertx</groupId>
      <artifactId>vertx-core</artifactId>
      <version>4.5.11</version>
    </dependency>

同时,接收到消息之后需要落库,我们需要连接GaussDB,链接配置如下开发Vert.x的服务逻辑,使用端口8888

package org.apache.servicecomb.fence.resource;

import io.vertx.core.AbstractVerticle;
import io.vertx.core.MultiMap;
import io.vertx.core.Promise;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.web.Router;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class MainVerticle extends AbstractVerticle {


    @Autowired
    private VertxResponseLogicService vertxResponseLogicService;

    @Override
    public void start(Promise<Void> startPromise) throws Exception {
        // Create a Router
        Router router = Router.router(vertx);

        // Mount the handler for all incoming requests at every path and HTTP method
        router.route().handler(context -> {
            // Get the address of the request
            String address = context.request().connection().remoteAddress().toString();
            // Get the query parameter "name"
            MultiMap queryParams = context.queryParams();
            String name = queryParams.contains("name") ? queryParams.get("name") : "unknown";
            // Write a json response
            JsonObject jsonObject =  new JsonObject()
                    .put("name", name)
                    .put("address", address)
                    .put("message", "Hello " + name + " connected from " + address);
            int id = vertxResponseLogicService.insert(jsonObject.toString());
            jsonObject.put("id",id);
            context.json(
                   jsonObject
            );

        });

        // Create the HTTP server
        vertx.createHttpServer()
                // Handle every request using the router
                .requestHandler(router)
                // Start listening
                .listen(8888)
                // Print the port on success
                .onSuccess(server -> {
                    System.out.println("HTTP server started on port " + server.actualPort());
                    startPromise.complete();
                })
                // Print the problem on failure
                .onFailure(throwable -> {
                    throwable.printStackTrace();
                    startPromise.fail(throwable);
                });
    }
}

3、部署并验证

打包工程后,上传到华为云的一台ECS上,然后启动工程中的5个服务。

访问Vert服务地址:http://IP:8888/?name=12323123123,会返回数据落库ID:

通过测试接口/api/resource/v1/responseInfo/getResponseInfoById?id=100,可以获取对应消息ID的具体落库信息:

三、交付件

(1) DEMO仓库地址: https://gitcode.com/uiu34/opensource-demo-vertx-20241120/overview

(2) DEMO开发提交记录: https://gitcode.com/uiu34/opensource-demo-vertx-20241120/commits/master

(3) 博客的地址: https://bbs.huaweicloud.com/blogs/440209

四、华为云资源清单

1.1 ECS

产品名称

CPU架构

实例类型

公共镜像

镜像版本

弹性云服务器

鲲鹏计算

鲲鹏通用计算增强型

Huawei Cloud EulerOS

Huawei Cloud EulerOS 2.0标准版 64 ARM(10GiB)

1.2 GuassDB

产品名称

产品类型

数据库引擎版本

内核引擎版本

实例类型

部署形态

云数据库GaussDB

基础版

GaussDB V2.0-8.201.0


505.2.0

集中式

12


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。