я использую вертх3
Мне нужно использовать Redis, чтобы устанавливать и получать значения (в будущем Redis может быть изменен на что-то другое).
Я ищу лучший дизайн для своей реализации.
Я работаю над кластером вершин, и мне нужно получить сообщения через шину событий, извлечь сообщение и вставить в Redis.
С другой стороны, я могу получать запросы через Интернет, а также извлекать сообщения и вставлять их в Redis.
Два варианта:
Должен ли я иметь «redis-verticle», который получает сообщения через шину и записывает их.
Должен ли я создать «Вертикул слушателя», который будет содержать DAO, который будет содержать объект RedisRepo, который будет их записывать.
Я также смогу обрабатывать веб-вызовы и удерживать этот объект DAO.
Если бы я был в весеннем приложении, я бы создал DAO, который содержит RedisRepo и внедрил бы его в мой сервисный уровень, но здесь мы получили шину событий, поэтому я не уверен.
(кстати, источник данных 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
Если я выберу второй вариант, должен ли я начать поддерживать синглтоны? Я не хочу дублировать свои дао, которые будут дублировать классы моего редисрепо.