如何使用Spring和rabbitmq的消费者检索列表

时间:2018-10-06 16:27:01

标签: spring-mvc spring-boot java-8 rabbitmq spring-rabbit

我有两个项目

  1. WebApp(SpringMVC)
  2. 微服务

这个想法是,我有一个页面,其中列出了数据库中的所有用户,因此基本上我需要在WebApp端使用侦听器,在微服务端使用生产者,通常流程如下

Whitout rabbitmq(同步)

  1. 点击页面“列出用户”
  2. 将我重定向到特定服务的UserController

    public List<User>getUsers(){//no args!!
       service.getUsers();//no args
    }
    
  3. UserService,具有访问数据库和检索所有用户的逻辑

    public List<User>getUsers(){//no args!!
       //connect to DB and retrieve all users
       return users
    }
    
  4. 在jsp上呈现用户

使用RabbitMQ并假设已经生成了用户,则显示了微服务方面的用户列表

我的问题是,如果我引入Rabbitmq,那么我需要一个方法来侦听消息(产品列表以JSON表示),但是与第一个消息流相比,现在的流程有所变化,因为

  1. 点击“列出用户”按钮
  2. 控制器需要一个方法findAll(Message message),在这里我需要传递一条消息,因为该服务需要一个消息,因为该服务是侦听器

    public List<User>getUsers(Message message){
        service.getAllUsers(**String message**);
    }
    
  3. 目前的服务是收听消息,我需要传递消息 我将在其中监听队列的参数

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

    所以基本上我的问题是第二个流程是否正确?

    如果是这样,我如何将Message对象从控制器传递到服务 因为在控制器中我不需要消息,但是为了 听我说,这是正确的吗?

    如果是这样,如何传递信息arg

    有更好的方法可以实现这一目标吗?

    致谢

1 个答案:

答案 0 :(得分:0)

使用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和用户必须对Jackson友好(无参数构造函数,setter方法)。