2015-09-08 4 views
2

Я использую vertx3Лучшая практика дизайна на vertx. Eventbus или Singleton для хранилищ

мне нужно использовать Redis для того, чтобы установить и получить значения. (Redis может быть изменено на что-то другое в будущем)

Iam ищет лучший дизайн практики для моей реализации.

Я работаю над кластером vertx, и мне нужно получить сообщения через eventbus извлечения сообщения и вставить в Redis.

В другой стороны, я могу получить запросы через веб, а также извлекать сообщения и вставлять их в Redis

Два варианта:

  1. Если у меня есть «Redis-Verticle», что получить сообщения через шину и записать их.

  2. Должен ли я создать «Listener verticle», который будет содержать DAO, который будет содержать объект RedisRepo, который будет их записывать.

    Я также буду в состоянии справиться с вебом-вызовами и удерживайте этот DAO объект

Если бы я был на весенне-приложении, которое я бы создать DAO, который держит RedisRepo и Ввожу его в свой слой услуг, но здесь мы получили eventbus, поэтому я не уверен.

(кстати в Redis DATASOURCE меня быть изменен на что-то другое, так что я должен думать об общих обертках)

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.

+0

У вас есть идеи в этом вопросе? –

ответ

1

Я думаю, что было бы лучше реализовать второй случай, создать отдельную вершину, в которой будет храниться клиент redis и отдельная вершина, которая будет принимать, обрабатывать и передавать запросы на redis. Каждая вершина должна иметь отдельный пул соединений, и в будущем вы можете столкнуться с проблемами с поддержкой нескольких пулов соединений при создании отдельных подключений от каждой вершины к redis.

Репликация DAO не должна быть здесь. Я бы предложил вам взглянуть на https://github.com/vert-x3/vertx-service-proxy. Это подпроект vert.x, который поможет вам понять, что такое сама вершина. Вы должны протаскивать вертикул как сервис (или, в частности, DAO), который предоставляет набор методов. Он ведет себя как одноэлементный, то есть вы не создаете новые экземпляры по вертикали по требованию, но может быть более одного экземпляра из него в зависимости от конфигурации (http://vertx.io/docs/vertx-core/groovy/#_specifying_number_of_verticle_instances).

+0

vertx-service-proxy все еще демонстрирует пример проведения нескольких сервисов и сообщает их с помощью event-us. Здесь я говорю о «проведении» dao и repos и делегировании их в рамках сервисов. что вы думаете? – rayman

 Смежные вопросы

  • Нет связанных вопросов^_^