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



我有两个项目

  1. WebApp(SpringMVC(
  2. 微服务

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

惠特兔子(同步(

  1. 点击页面"列出用户"
  2. 将我重定向到特定服务的用户控制器

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

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

使用 RabbitMQ 并假设用户已经生成了微服务端的用户列表

我的问题是关于如果我引入 rabbitmq,那么我需要一种方法来收听消息(产品列表作为 JSON(,但现在与第一个相比,流程发生了一些变化,因为

  1. 点击按钮"列出用户">
  2. 控制器需要一个方法 findAll(消息消息(,这里我需要传递一条消息,因为服务期待一个消息,因为服务是侦听器

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

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

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

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

    如果是这样,如何传递消息参数

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

    问候

使用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 和用户必须是杰克逊友好的(无参数构造函数,二传手(。

最新更新