我有两个项目
- WebApp(SpringMVC(
- 微服务
这个想法是我有一个页面,其中列出了来自数据库的所有用户,所以基本上我需要 WebApp 端的侦听器和微服务端的生产者,通常流程如下
惠特兔子(同步(
- 点击页面"列出用户"
-
将我重定向到特定服务的用户控制器
public List<User>getUsers(){//no args!! service.getUsers();//no args }
-
具有访问数据库和检索所有用户的逻辑的用户服务
public List<User>getUsers(){//no args!! //connect to DB and retrieve all users return users }
-
在 jsp 上渲染用户
使用 RabbitMQ 并假设用户已经生成了微服务端的用户列表
我的问题是关于如果我引入 rabbitmq,那么我需要一种方法来收听消息(产品列表作为 JSON(,但现在与第一个相比,流程发生了一些变化,因为
- 点击按钮"列出用户">
-
控制器需要一个方法 findAll(消息消息(,这里我需要传递一条消息,因为服务期待一个消息,因为服务是侦听器
public List<User>getUsers(Message message){ service.getAllUsers(**String message**); }
-
现在的服务是收听消息,我需要传递消息 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 和用户必须是杰克逊友好的(无参数构造函数,二传手(。