ray*_*man 7 java architecture event-bus vert.x
我正在使用 vertx3
我需要使用 redis 来设置和获取值。(Redis 将来可能会更改为其他内容)
我正在为我的实现寻找最佳实践设计。
我正在研究 vertx 集群,我需要通过 eventbus 检索消息提取消息并插入到 Redis 中。
另一方面,我可以通过网络获取请求,也可以提取消息并将它们插入到 redis 中
两种选择:
我是否应该有一个“redis-verticle”来通过总线获取消息并写入它们。
我应该创建一个“侦听器垂直”来保存 DAO,它将保存将写入它们的 RedisRepo 对象。
我也将能够处理网络调用并持有这个 DAO 对象
如果我在 spring-app 上,我会创建一个包含 RedisRepo 的 DAO 并将其注入我的服务层,但在这里我们得到了 eventbus,所以我不确定。
(顺便说一下,redis 数据源我被改成了别的东西,所以我得考虑通用包装器)
1.
public class RedisRepoVerticle extends AbstractVerticle {
...
public void start() {
client = new RedisClient("localhost", 6379);
connection = client.connect();
...
vertx.eventBus().consumer("redis-operation", (handler) -> {
{
JsonObject msg = new JsonObject(handler.body().toString());
//write straight to Redis
}
});
}
2.
public class RedisMessageListener extends AbstractVerticle {
DatasourceDAO datasource
...
public void start() {
client = new RedisClient("localhost", 6379);
connection = client.connect();
...
vertx.eventBus().consumer("redis-operation", (handler) -> {
{
JsonObject msg = new JsonObject(handler.body().toString());
datasourceDAO.writeToRedis(..);
}
});
}
//datasourceDAO will hold RedisRepo object
Run Code Online (Sandbox Code Playgroud)
如果我选择第二个选项,我应该开始维护单身吗?我不想复制我的 daos,它会复制我的 redisrepo 的类
小智 4
我认为最好实现第二种情况,创建一个单独的 verticle 来容纳一个 redis 客户端和一个单独的 verticle 来接受、处理请求并将请求传递给 redis。每个 verticle 应该有单独的连接池,并且在将来创建从每个 verticle 到 redis 的单独连接时,您可能会遇到维护多个连接池的问题。
DAO-s 复制不应该是这里的情况。我建议您查看https://github.com/vert-x3/vertx-service-proxy。这是一个 vert.x 子项目,可以帮助您了解 verticle 本身是什么。您应该将 Verticle 作为提供一组方法的服务(或者特别是 DAO)。它的行为类似于单例,也就是说,您不会按需创建 verticle 的新实例,但根据配置可以有多个实例(http://vertx.io/docs/vertx-core /groovy/#_specifying_number_of_verticle_instances)。
归档时间: |
|
查看次数: |
6205 次 |
最近记录: |