gpt4 book ai didi

java - vertx 上的最佳实践设计。存储库的 Eventbus 或 Singleton

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:57:43 25 4
gpt4 key购买 nike

我正在使用 vertx3

我需要使用redis来设置和获取值。(Redis将来可能会更改为其他东西)

我正在为我的实现寻找最佳实践设计。

我正在处理 vertx 集群,我需要通过事件总线检索消息,提取消息并插入到 Redis 中。

另一方面,我可以通过网络获取请求,还可以提取消息并将它们插入到 redis 中

两种选择:

  1. 我是否应该有一个“redis-verticle”来通过总线获取消息并写入它们。

  2. 我是否应该创建一个“Listener verticle”来容纳 DAO,DAO 将容纳 RedisRepo 对象,而 RedisRepo 对象将写入它们。

    我还将能够处理网络调用并持有这个 DAO 对象

如果我在 spring-app 上,我会创建一个包含 RedisRepo 的 DAO,并将其注入(inject)我的服务层,但这里我们有事件总线,所以我不确定。

(顺便说一句,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

如果我选择第二个选项,我应该开始维护单例吗?我不想复制我的 daos,它会复制我的 redisrepo 的类

最佳答案

我认为实现第二种情况会更好,创建一个单独的 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) 可以有多个实例。

关于java - vertx 上的最佳实践设计。存储库的 Eventbus 或 Singleton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32461427/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com