Java vertx上的最佳实践设计。存储库的Eventbus或Singleton
我正在使用vertx3 我需要使用redis来设置和获取值 我正在为我的实现寻找最佳实践设计 我正在vertx集群上工作,我需要通过eventbus检索消息,提取消息并插入Redis 另一方面,我可以通过web获取请求,也可以提取消息并将其插入redis 两种选择: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对象 如果我使用的是
如果我选择第二个选项,我应该开始维护单例吗?我不想复制我的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