Как получить список потребителем с помощью Spring и rabbitmq - PullRequest
0 голосов
/ 06 октября 2018

У меня есть два проекта

  1. WebApp (SpringMVC)
  2. Microservice

Идея состоит в том, что у меня есть страница, на которой я перечисляю всепользователи из БД, поэтому в основном мне нужен слушатель на стороне WebApp и продюсер на стороне микросервиса, обычно поток выглядит следующим образом

Whitout rabbitmq (синхронно)

  1. Нажмите на страницу «Список пользователей»
  2. UserController, который перенаправляет меня на определенный сервис

    public List<User>getUsers(){//no args!!
       service.getUsers();//no args
    }
    
  3. UserService с логикой для доступа к БД и получения всехusers

    public List<User>getUsers(){//no args!!
       //connect to DB and retrieve all users
       return users
    }
    
  4. Рендеринг пользователей на jsp

С RabbitMQ и при условии, что пользователи уже создали список пользователей насторона microservice

Мой вопрос о том, что если я введу rabbitmq, тогда мне нужен метод, в котором я слушаю сообщение (список продуктов в формате JSON), но теперь поток немного меняется по сравнению с первымодин, потому что

  1. Нажмите кнопку «Список пользователей»«
  2. Контроллеру нужен метод findAll (Message message), здесь мне нужно передать сообщение, потому что сервис ожидает его, так как сервисом является Listener

    public List<User>getUsers(Message message){
        service.getAllUsers(**String message**);
    }
    
  3. Служба, как сейчас, - это прослушивание сообщения, мне нужно передать аргумент Message, в котором я буду прослушивать очереди

    @RabbitListener(queues = "${queue}", containerFactory = "fac")
    public List<User> getUsers(String message){
         //Transform JSON to POJO 
         //some logic...
         return users;
    
    }
    

    Так что, в принципе, мой вопрос, является ли второй поток правильным?

    Если да, то как мне передать объект Message от контроллера к сервису, потому что в контроллере мне не нужно сообщение, но для прослушивания у меня это правильно?

    Если да, то как передать сообщение arg

    Есть лучший способ добиться этого?

    С уважением

1 Ответ

0 голосов
/ 06 октября 2018

Используйте Jackson2JsonMessageConverter, и фреймворк сделает все преобразования за вас.

Контроллер:

List<User> users = template.convertSendAndReceiveAsType("someExchange", "someRoutingKey", 
    myRequestPojo, new ParameterizedTypeReference<List<User>>() {});

Сервер:

@RabbitListener(queues = "${queue}", containerFactory = "fac")
public List<User> getUsers(SomeRequestPojo request){
     //some logic...
     return users;
}

Подключите конвертерв фабрику контейнеров слушателей и в RabbitTemplate.

Запрос Pojo и Users должны быть дружественными к Джексону (конструктор без аргументов, сеттеры).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...