vertx应用实战Vert.x Blueprint


1.Vert.x 特性简介
2.Vert.x Blueprint 实战
3.Vert.x 未来展望

4.Q&A主题

一、特性简介

Vert.x能做什么?

Polyglot Support

•Java

•Ruby

•JavaScript

•Groovy

•Ceylon

•Scala(in progress)

开发模型/线程模型
Verticle之间进行通信: Event Bus
逻辑单元:Verticle(Actor-like)
Event Loop线程:处理事件(不能阻塞!)

Worker线程:可执行阻塞任务



Verticle 线程安全



异步开发模式


异步开发模式


Event Bus
Vert.x的神经系统(各组件之间通信)
•每个消息都会被发送至某个地址(address)
•消息会在消息接收者绑定的Handler中进行处理

•多种消息模式


Event Bus Clients && Bridges
•Go
•C
•C#
•Python
•SockJS(浏览器端/Node.js)
•TCP
•AMQP
•Stomp

•Camel

Reactive Pattern

Vert.x默认都是基于回调的API ——Nightmare!

•Observable(Rx-fiedAPIs)

•Vert.x Sync (Fiber)

•Future(map/compose)

二、Vert.x Blueprint 实战
•2.1 Vert.x Web 开发简化
•2.2 Event Bus 消息模式、原理及高阶应用
•2.3 异步RPC
•2.4 微服务设计与应用(服务发现、Circuit Breaker、API Gateway)
•2.5 Vert.x Rx应用

•2.6 整合其他框架

Vert.x Blueprint

•TodoBackend

•Vert.x Kue

•Micro-Shop Microservice

http://vertx.io/blog/vert-x-blueprint-tutorials/

Vert.x Web

•REST Services/Web Application

结合异步服务冗余代码多如何简化开发?

•封装Helper Handler

•封装Future-based Routing Handler

•封装基于注解的Vert.x Web

Vert.x Web原生代码


Vert.x WebHelper Handler


Vert.x Web另一种思路:类似于Play Framework 2


Action: Request[A] => Result

Vert.x Web


Vert.x KueVert.x Kue


是一个使用Vert.x开发的优先级工作队列,数据存储使用的是Redis。Vert.x Kue是Automattic/kue(Node.js)的Vert.x实现版本。


再谈Event Bus

•MessageProducer

•Interceptor

•MessageConsumer

•Flow Control

•集群模式实现原理

•消息模型





Event Bus 消息模型


•Request/Response

Clustered Event Bus实现原理

•基于TCP

•底层通过Cluster Manager同步ServerID

•消息协议:一种简单的Wire Protocol



Flow Control in Vert.x


Event Bus 拦截器可以实现链式拦截


拦截器本质是一个Handler<SendContext>我们可以通过message()方法获取包含的消息并进行处理,然后调用next()方法执行下一个拦截器(或进行消息的处理)

VERTX异步RPC

Asynchronous RPCVert.x 提供原生支持异步RPC的组件Vert.x Service Proxy



自动生成:CheckoutServiceVertxEBProxy, CheckoutServiceVertxProxyHandler

Vert.x Codegen

Vert.x Codegen本质上是一个注解处理器(APT),编译时处理注解并根据模板生成相应的代码。

.–生成JSON Converter

.–生成其它语言的代码/Rx版本的代码

.–生成服务代理类及服务代理处理器

使用时需要在Maven/Gradle中进行相应的配置

Asynchronous RPC 原理

•底层通过Clustered Event Bus进行通信

•通过Vert.x Codegen生成服务代理类



VERT.X

Microservice


Microservice

•Service Discovery (服务发现)

•Circuit Breaker (断路器)

•API Gateway

•Event Sourcing (事件溯源模式)

Micro-Shop 总览


不同组件之间如何通信?

•AsyncRPC (via Event Bus)

•REST

•Message (via Event Bus)

•自定义


Service Discovery(Registry)

•用服务记录(Record)代表某一个服务,里面保存着服务的名称、类型、位置以及其它元数据

•创建好服务记录后即可发布服务(publish)

•需要调用服务时,可以从服务发现组件获取服务记录,然后创建对应的服务实例

•可以自定义ServiceImporter导入服务,或ServiceExporter导出服务

服务记录存储在哪里?

不同的ServiceDiscoveryBackend代表不同的存储机制

•默认存储在LocalMap(单机模式)/DistributedMap(集群模式,具体取决于Cluster Manager)

•Vert.x也提供RedisBackend ——将服务记录存储于Redis中

•ZooKeeperBackend (3.4.0特性)

Circuit Breaker


Event Sourcing

[(A123456, 4),(A1763515, 1)]


Event Sourcing的优点DDD/CQRS/Event Sourcing

•我们可以从过去的事件序列中组建出任意时刻的数据状态

•每个过去的事件都得以保存,因此这使得补偿事务成为可能

•我们可以从事件存储中获取事件流,并且以异步、响应式风格对其进行变换和处理

•事件存储同样可以当作为数据日志

API Gateway


API Gateway

•针对Failure设计,实现容错

•请求的分发,协议的转换

•重要组件,需要保证高可用(HA)

•权限管理

•心跳检测

•性能?

API Gateway分发请求(Reverse Proxy)

.Prepare: 每个REST Endpoint在发布的时候都会在元数据内存储对应的api.name

.请求格式:/api/{api.name}/xxx

.过程:首先解析请求路径对应的api.name,然后从服务发现层获取此API对应的所有REST服务记录列表;接着根据一定的负载均衡算法从其中选出一个服务记录,构造服务实例,然后进行请求的转发。

API Gateway

分发请求(Reverse Proxy)


API Gateway请求分发的另外一些情况

•HTTP(S) -> Event Bus:使用request/response消息模型与服务进行通信

•缺陷:Event Bus需要支持地址匹配(类似于路由,目前已列入wishlist)

•HTTP(S) -> 其他协议:实现协议转换接口(比如实现对应的Event Bus Bridge)

API Gateway

结合Circuit Breaker


VerticleFailover

HA模式下,Verticle挂了以后会在集群内的其他节点redeploy



Vert.x Auth(JDBC/JWT/Mongo/Shiro/OAuth2)

•如何与API Gateway结合?

•如何简化权限验证的逻辑?

权限管理

•得到Principal以后,将其通过Header传递至下层服务中


•封装一个requireLogin路由处理包装来简化权限验证


•若传入的principal不合法或不存在,直接返回401

•相应的路由处理函数里面可以获取Principal:


Rx-fiedAPIs in Vert.x


Vert.x Rx API 返回的Observable本质上是一种Single(Emit once)与Future类似Rx-fiedAPIs in Vert.x

Rx-fiedAPIs in Vert.x

•getConnectionObservable(): Observable<SQLConnection>

 •getConnection(handler): voidReactive!


如何与其它框架/库整合?

.异步API:Context#runOnContextExample:Netflix Hystrix(Async)IMPORTANT: 要遵循Vert.x的线程模型!

.同步API:Vertx#executeBlockingExample :MyBatisORM

三、未来展望

New Components

•Vert.x Kafka Client (Stream based)

•Vert.x ZooKeeperCluster

•Vert.x Consul Client

•Vert.x ScalaAnd maybe many more…

•Vert.x Configuration Service

点击打开链接


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你可以按照以下步骤在Maven项目中导入Vert.x: 1. 首先,在你的Maven项目中的“pom.xml”文件中添加以下配置,用于添加Vert.x的依赖: ```xml <dependency> <groupId>io.vertx</groupId> <artifactId>vertx-core</artifactId> <version>3.9.3</version> </dependency> ``` 这里我们使用Vert.x的核心库,版本号为3.9.3。 2. 如果你需要使用Vert.x的其他模块,你可以在“pom.xml”文件中添加相应的依赖。例如,如果你想使用Vert.x Web模块,你可以添加以下依赖: ```xml <dependency> <groupId>io.vertx</groupId> <artifactId>vertx-web</artifactId> <version>3.9.3</version> </dependency> ``` 3. 在你的Java代码中,你可以使用以下方式来引入Vert.x的类: ```java import io.vertx.core.Vertx; ``` 这里我们引入了Vertx类,它是Vert.x的核心类。 4. 接下来,在你的Java代码中,你可以创建一个Vertx实例: ```java Vertx vertx = Vertx.vertx(); ``` 这个Vertx实例将作为Vert.x应用程序的入口点。 5. 最后,你可以在Vertx实例上启动你的Vert.x应用程序。例如,以下代码将启动一个简单的HTTP服务器: ```java vertx.createHttpServer().requestHandler(req -> { req.response().end("Hello, World!"); }).listen(8080); ``` 这个HTTP服务器将监听8080端口,并在收到请求后返回“Hello, World!”消息。 以上就是在Maven项目中导入Vert.x的步骤。你可以根据需要添加其他的依赖和代码,来实现更加复杂的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值