Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java vertx上的最佳实践设计。存储库的Eventbus或Singleton_Java_Architecture_Event Bus_Vert.x - Fatal编程技术网

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

Java vertx上的最佳实践设计。存储库的Eventbus或Singleton,java,architecture,event-bus,vert.x,Java,Architecture,Event Bus,Vert.x,我正在使用vertx3 我需要使用redis来设置和获取值 我正在为我的实现寻找最佳实践设计 我正在vertx集群上工作,我需要通过eventbus检索消息,提取消息并插入Redis 另一方面,我可以通过web获取请求,也可以提取消息并将其插入redis 两种选择: 我应该有一个“redis verticle”,通过总线获取消息并编写它们 我是否应该创建一个“侦听器垂直体”,它将保存DAO,而DAO将保存编写它们的RedisRepo对象 我还将能够处理web调用并持有此DAO对象 如果我使用的是

我正在使用vertx3

我需要使用redis来设置和获取值

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

我正在vertx集群上工作,我需要通过eventbus检索消息,提取消息并插入Redis

另一方面,我可以通过web获取请求,也可以提取消息并将其插入redis

两种选择:

  • 我应该有一个“redis verticle”,通过总线获取消息并编写它们

  • 我是否应该创建一个“侦听器垂直体”,它将保存DAO,而DAO将保存编写它们的RedisRepo对象

    我还将能够处理web调用并持有此DAO对象

  • 如果我使用的是spring应用程序,我会创建一个DAO来保存RedisRepo并将其注入到我的服务层,但这里我们得到了eventbus,所以我不确定

    (顺便说一句,redis数据源可能会更改为其他内容,因此我必须考虑通用包装)


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

    我认为最好实现第二种情况,创建一个单独的垂直体,它将容纳一个redis客户端和一个单独的垂直体,该垂直体将接受、处理并将请求传递给redis。每个垂直链接都应该有单独的连接池,将来在创建从每个垂直链接到redis的单独连接时,您可能会遇到维护多个连接池的问题


    DAO-s复制不应该是这种情况。我建议你去看看。这是一个vert.x子项目,可以帮助你理解垂直体本身是什么。您应该将垂直体视为提供一组方法的服务(尤其是DAO)。它的行为类似于单例,即您不需要按需创建verticle的新实例,但根据配置(),它可以有多个实例。

    vertx服务代理仍然显示了一个示例,其中包含两个服务,并使用事件us进行通信。在这里,我谈论的是“持有”dao和REPO,并在服务中委托它们。你觉得呢?你对这件事有什么见解吗?
    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