vertx的学习总结6

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 {@Overridepublic 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 {@Overridepublic 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;@BeforeEachvoid setup() {vertx = Vertx.vertx(); // 初始化 Vert.x 实例}@Testvoid testSomething(VertxTestContext testContext) throws InterruptedException {// 在这里编写你的测试逻辑vertx.setTimer(1000,event -> {System.out.println("hello");});Thread.sleep(2000);// 使用 testContext 来进行异步测试,并处理测试结果testContext.completeNow(); // 示例:完成测试}
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Neo4j最新安装教程(图文版)

目录 一、软件介绍 二、下载软件 1、官方下载 2、云盘下载 三、安装教程 1、首先配置Neo4j的环境变量 2、启动neo4j服务器 3、访问界面 一、软件介绍 官网地址:https://neo4j.com/ Neo4j是一个高性能、可扩展的图数据库管理系统。它专注于存储、查询和处理大…

1.6 计算机网络的性能

思维导图: 1.6.1 计算机网络的性能指标 前言: 我的理解: 这段前言主要介绍了关于计算机网络性能的两个方面的讨论。首先,计算机网络的性能可以通过一些重要的性能指标来衡量。但除了这些指标之外,还有一些非性能特征…

JAVA学习(4)-全网最详细~

🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如…

Flutter开发之Package与Plugin

前言 在flutter中有包和插件两个概念,插件 (plugin) 是 package 的一种,全称是 plugin package,我们简称为 plugin,中文叫插件。包(Package)主要指对flutter相关功能的封装,类似于Android中的插件和iOS中的三方库。而插…

CUDA+cuDNN+TensorRT 配置避坑指南

深度学习模型加速部署的环境配置,需要在本地安装NVIDIA的一些工具链和软件包,这是一个些许繁琐的过程,而且一步错,步步错。笔者将会根据自己的经验来提供建议,减少踩坑几率。当然可以完全按照官方教程操作,…

插入排序:简单而有效的排序方法

在计算机科学中,排序算法是一个重要且常见的主题,它们用于对数据进行有序排列。插入排序(Insertion Sort)是其中一个简单但有效的排序算法。本文将详细解释插入排序的原理和步骤,并提供Java语言的实现示例。 插入排序的…

B2主题优化:WordPress文章每次访问随机增加访问量

老站长都知道,一个新站刚开始创建,内容也不多的时候,用户进来看到文章浏览量要么是0,要么是 个位数,非常影响体验,就会有一种“这个网站没人气,看来不行”的感觉。 即使你的内容做的很好&#x…

全志ARM926 Melis2.0系统的开发指引②

全志ARM926 Melis2.0系统的开发指引② 编写目的4. 编译工具链使用4.1.工具链通用配置4.2.模块的工具链配置4.3.简单的 makefile 5. 固件烧录工具的安装5.1.PhoenixSuit 的安装步骤5.2.检验 USB 驱动安装5.3.使用烧录软件 PhoenixSuit -全志相关工具和资源-.1 全志固件镜像修改工…

HTTP协议,请求响应

、概述 二、HTTP请求协议 三、HTTP响应协议 四、请求数据 1.简单实体参数 RequestMapping("/simpleParam")public String simpleParam(RequestParam(name "name" ,required false ) String username, Integer age){System.out.println (username "…

Boost程序库完全开发指南:1.2-C++基础知识点梳理

主要整理了N多年前&#xff08;2010年&#xff09;学习C的时候开始总结的知识点&#xff0c;好长时间不写C代码了&#xff0c;现在LLM量化和推理需要重新学习C编程&#xff0c;看来出来混迟早要还的。 1.const_cast <new_type> (expression)[1] 解析&#xff1a;const_c…

基于Vue+ELement实现增删改查案例与表单验证(附源码)

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《ELement》。&#x1f3af;&#x1f3af; &#x1…

mysql双主+双从集群连接模式

架构图&#xff1a; 详细内容参考&#xff1a; 结果展示&#xff1a; 178.119.30.14(主) 178.119.30.15(主) 178.119.30.16(从) 178.119.30.17(从)

全志ARM926 Melis2.0系统的开发指引①

全志ARM926 Melis2.0系统的开发指引① 1. 编写目的2. Melis2.0 系统概述3. Melis2.0 快速开发3.1. Melis2.0 SDK 目录结构3.2. Melis2.0 编译环境3.3. Melis2.0 固件打包3.4. Melis2.0 固件烧录3.5.串口打印信息3.6. Melis2.0 添加和调用一个模块3.6.1. 为什么划分模块&#xf…

【学习笔记】CF1817F Entangled Substrings(基本子串结构)

前置知识&#xff1a;基本子串结构&#xff0c;SAM的结构和应用 学长博客 字符串理论比较抽象&#xff0c;建议直观的去理解它 子串 t t t的扩展串定义为 ext(t) : t ′ \text{ext(t)}:t ext(t):t′&#xff0c;满足 t t t是 t ′ t t′的子串&#xff0c;且 occ(t) occ(t…

水浒传数据集汇总

很喜欢《水浒传》&#xff0c;希望能将它融入我的考研复习中&#xff0c;打算用水浒传数据来贯穿数据结构的各种知识&#xff0c;先汇总下找到的数据集 天池上看到的一个水浒传文本数据集&#xff1a;https://tianchi.aliyun.com/dataset/36027 Hareric/masterworkNLP: 基于社…

基于 SpringBoot 2.7.x 使用最新的 Elasticsearch Java API Client 之 ElasticsearchClient

1. 从 RestHighLevelClient 到 ElasticsearchClient 从 Java Rest Client 7.15.0 版本开始&#xff0c;Elasticsearch 官方决定将 RestHighLevelClient 标记为废弃的&#xff0c;并推荐使用新的 Java API Client&#xff0c;即 ElasticsearchClient. 为什么要将 RestHighLevelC…

【C语言】内存函数的详细教学和模拟实现

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是gugugu。希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f194;本文由 gugugu 原创 CSDN首发&#x1f412; 如需转载还请通知⚠…

【再识C进阶4】详细介绍自定义类型——结构体、枚举和联合

学习目标&#xff1a; 在上一篇博客中&#xff0c;我们已经详细地学习了字符分类函数、字符转换函数和内存函数。那这一篇博客和上一篇博客的关系不是那么相连。 这一篇博客主要介绍一下自定义类型&#xff0c;因为在解决实际问题时&#xff0c;由于世界上的因素有很多&#xf…

karmada v1.7.0安装指导

前言 安装心得 经过多种方式操作&#xff0c;发现二进制方法安装太复杂&#xff0c;证书生成及其手工操作太多了&#xff0c;没有安装成功&#xff1b;helm方式的安装&#xff0c;v1.7.0的chart包执行安装会报错&#xff0c;手工修复了报错并修改了镜像地址&#xff0c;还是各…

一文拿捏Spring事务之、ACID、隔离级别、失效场景

1.&#x1f31f;Spring事务 1.编程式事务 事务管理代码嵌入嵌入到业务代码中&#xff0c;来控制事务的提交和回滚&#xff0c;例如TransactionManager 2.声明式事务 使用aop对方法前后进行拦截&#xff0c;然后在目标方法开始之前创建或者加入一个事务&#xff0c;执行完目…