vertx的学习总结6之动态代理类和测试

news2024/11/19 2:49:15

Beyond the event bus

一、章节覆盖:

如何在事件总线之上公开服务
verticles和事件总线服务的异步测试

动态代理:

MyService 接口

package porxy.test;


import io.vertx.codegen.annotations.ProxyGen;

@ProxyGen
public interface MyService {

    void hello(String name);

}
MyServiceImpl类
package porxy.test;

public class MyServiceImpl implements MyService {

    @Override
    public void hello(String name) {
        System.out.println("Hello, " + name + "!");
    }

}

Main类

package porxy.test;

import io.vertx.core.AbstractVerticle;
import io.vertx.core.Vertx;
import io.vertx.serviceproxy.ProxyHelper;

public class MainVerticle extends AbstractVerticle {

    @Override
    public void start() {
        ProxyHelper.registerService(MyService.class, vertx, new MyServiceImpl(), "my-service");

        MyService service = ProxyHelper.createProxy(MyService.class, vertx, "my-service");

        service.hello("World");
    }

    public static void main(String[] args) {
        Vertx vertx1 = Vertx.vertx();
        vertx1.deployVerticle(new MainVerticle());
    }
}

看到这里,你们肯定一脸懵逼,如何在事件总线之上公开服务关动态代理什么事?其实是这样的,

@ProxyGen是Vert.x框架中用于生成代理类的工具。它可以根据接口定义生成对应的代理类,代理类可以用于在不同的Vert.x组件之间进行通信。(就是eventbus)

这些生成的代理类主要用于Vert.x的分布式事件总线。分布式事件总线是一种机制,它允许在Vert.x集群中的不同节点之间进行消息传递和事件发布/订阅。使用@ProxyGen生成的代理类可以将接口方法调用转化为事件总线消息发送,并且将返回结果反馈给调用方。

具体来说,当使用@ProxyGen注解修饰一个接口时,会生成一个代理类,该代理类实现了被注解的接口,并且可以通过事件总线进行远程调用。生成的代理类内部会将接口方法调用封装为消息对象,然后通过事件总线将消息发送给服务提供方,服务提供方收到消息后会执行相应的逻辑,并将结果返回给调用方。

生成的代理类使得远程通信变得更加简单和透明,开发者无需关心底层的通信细节,只需要像调用本地方法一样调用生成的代理类即可。

二、异步测试

1. 引入依赖

各个注解的解释

  1. @ExtendWith(VertxExtension.class) 注解告诉 JUnit 使用 VertxExtension 来运行测试。VertxExtension 内部会创建一个 Vert.x 实例,并在测试之前和之后进行启动和关闭操作。它还提供了一些用于执行异步操作和处理 Vert.x 上下文的工具方法。

  2. @BeforeEach 注解表示在每个测试方法之前运行该方法。在测试方法运行之前,会先执行被 @BeforeEach 注解修饰的方法。这里可以进行一些准备工作,例如创建测试数据、初始化对象等。

  3. @Test 注解表示该方法是一个测试方法。JUnit 会执行被 @Test 注解修饰的方法,并验证其行为是否符合预期。可以在这里编写各种测试逻辑和断言  

package Test;

import io.vertx.core.Vertx;
import io.vertx.junit5.VertxExtension;
import io.vertx.junit5.VertxTestContext;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;

@ExtendWith(VertxExtension.class)
public class VertxTest {

    private Vertx vertx;

    @BeforeEach
    void setup() {
        vertx = Vertx.vertx(); // 初始化 Vert.x 实例
    }

    @Test
    void testSomething(VertxTestContext testContext) throws InterruptedException {
        // 在这里编写你的测试逻辑
        vertx.setTimer(1000,event -> {
            System.out.println("hello");
        });
        Thread.sleep(2000);
        // 使用 testContext 来进行异步测试,并处理测试结果
        testContext.completeNow(); // 示例:完成测试
    }
}

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

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

相关文章

基于ssm的电商管理平台/基于javaweb的网上购物系统/电子商城网站

摘 要 本文论述了电商管理平台的设计和实现,该网站从实际运用的角度出发,运用了计算机网站设计、数据库等相关知识,基于SSM框架、JSP技术和Mysql数据库设计来实现的,网站主要包括用户注册、用户登录、查看商品信息、系统公告等…

优化方法的应用(optimtool.example)

import optimtool as oo from optimtool.base import np, sp, pltpip install optimtool>2.4.2优化方法的应用(optimtool.example) import optimtool.example as oeLasso问题(Lasso) oe.Lasso.[函数名]([矩阵A], [矩阵b], [因…

Linux删除空目录/非空目录和文件

一、删除目录 删除名为mydir的空目录: rmdir mydir 删除名为mydir的非空目录(非空目录是指该目录包含了其他文件或子目录,而不是空的或没有任何内容的目录) rm -r mydir 删除mydir1下的空目录mydir2 rmdir mydir1/mydir2 删除当前目录下所有以dir一个数字结尾的目录…

打开MySQL数据库

在命令行里输入mysql --version就可以查看: mysql -uroot -p之前设置的密码(不用输入)就可登录成功:

什么是邮件签名证书?

邮件签名证书是一种数字证书,用于保护电子邮件的安全性和可信度。邮件签名证书可以确保电子邮件本身在发送过程中不会被篡改或伪造,同时也可以验证发件人的身份。 邮件签名证书的工作原理是使用S/MIME协议。S/MIME协议是一种用于加密和签名电子邮件的标准…

tio-websocket-spring-boot-starter的最简单实例,看完你一定有所收获

前言 我最近一个月一直在寻找能够快速开发实时通讯的简单好用的模块,所以我就去寻找了一下相关的内容.在此之前我使用的是Spring原生的webSocket,她有个弊端就是设置组不容易设置,而且配置上也稍微复杂一点,需要配置拦截器和处理器,还需要把它放入到Springboot的启动容器里面,也…

在word文档里面插入漂亮的伪代码

推荐用texsword.0.8 安装与界面 下载链接:https://sourceforge.net/projects/texsword/ 极为轻便,是Word的一个宏 安装过程也是极为简单,复制解压后的 texsword.dotm 文件到 C:\Users\{YOUR_USER_NAME}\AppData\Roaming\Microsoft\Word\ST…

gitgitHub

在git中复制CtrlInsert、粘贴CtrlShif 一、用户名和邮箱的配置 查看用户名 :git config user.name 查看密码: git config user.password 查看邮箱:git config user.email 查看配置信息: $ git config --list 修改用户名 git co…

【树】树的直径和重心

目录 一.树的直径 (1)定义 (2)思路 (3)例题 (4)std(第一小问) 二.树的重心 (1)介绍 (2)求重心 (3)例…

全排列[中等]

优质博文:IT-BLOG-CN 一、题目 给定一个不含重复数字的数组nums,返回其所有可能的全排列。你可以按任意顺序返回答案。 示例 1: 输入:nums [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 示例…

【机器学习-黑马程序员】人工智能、机器学习概述

文章目录 前言一、人工智能概述二、什么是机器学习二、机器学习算法分类三、机器学习开发流程 前言 本专栏文章为观看黑马程序员《python机器学习》所做笔记,课程地址在这。如有侵权,立即删除。 一、人工智能概述 机器学习和人工智能、深度学习的关系 机…

Harbor+Trivy实现镜像漏洞扫描

文章目录 安装HarborTrivyoras下载压缩包解压并安装 离线漏洞库oras方式trivy方式配置离线库 扫描镜像harbor配置扫描镜像 使用命令扫描 安装 Harbor 安装Harbor时,指定--with-trivy参数同时安装trivy组件。 ./install.sh --with-trivyTrivy 下载最新版本的安装…

目标检测算法改进系列之Backbone替换为FocalNet

FocalNet 近些年,Transformers在自然语言处理、图像分类、目标检测和图像分割上均取得了较大的成功,归根结底是自注意力(SA :self-attention)起到了关键性的作用,因此能够支持输入信息的全局交互。但是由于…

OpenCV项目开发实战--使用最先进的方法“F、B、Alpha Matting”进行图像抠图--提供完整代码

示范 让我们对现实生活中的图像启动 FBA Matting 方法。要应用 FBA Matting 算法,我们首先需要生成一个 trimap(我们稍后会介绍它是什么)。在我们的演示中,我们将使用预训练的DeepLabV3生成分割掩模,其中每个像素属于前景类的概率。之后,我们将使用大量膨胀操作将边界像…

【6】c++设计模式——>UML表示类之间的依赖关系

依赖(Dependency)关系是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系,大多数情况下依赖关系体现在某个类的方法使用另一个类的对象作为参数。 在U…

JavaEE-网络编程套接字(UDP/TCP)

下面写一个简单的UDP客户端服务器流程 思路: 对于服务器端:读取请求,并解析–> 根据解析出的请求,做出响应(这里是一个回显,)–>把响应写回客户端 对于客户端:从控制台读取用户输入的内容–>从控制…

【MyBatis-Plus】快速精通Mybatis-plus框架—快速入门

大家在日常开发中应该能发现,单表的CRUD功能代码重复度很高,也没有什么难度。而这部分代码量往往比较大,开发起来比较费时。 因此,目前企业中都会使用一些组件来简化或省略单表的CRUD开发工作。目前在国内使用较多的一个组件就是…

约束优化算法(optimtool.constrain)

import optimtool as oo from optimtool.base import np, sp, pltpip install optimtool>2.4.2约束优化算法(optimtool.constrain) import optimtool.constrain as oc oc.[方法名].[函数名]([目标函数], [参数表], [等式约束表], [不等式约数表], [初…

1798_GNU pdf阅读器evince_支持的格式

全部学习汇总: GreyZhang/g_GNU: After some years I found that I do need some free air, so dive into GNU again! (github.com) 顺着之前的wiki了解的文档,这一次看看evince支持的文件格式。关于这部分,原始的介绍网页链接: A…

SpringCloud(二)Docker、Spring AMQP、ElasticSearch

文章目录 DockerDocker与虚拟机Docker架构镜像、容器、镜像托管平台Docker架构Docker实践 Spring AMQP简单使用案例工作队列- WorkQueue发布订阅服务FanoutExchangeDirectExchangeTopicExchange 消息转换器 ElasticSearch倒排索引IK分词器IK分词拓展与停用字典 操作索引库mappi…