我有两个项目
这个想法是,我有一个页面,其中列出了数据库中的所有用户,因此基本上我需要在WebApp端使用侦听器,在微服务端使用生产者,通常流程如下
Whitout rabbitmq(同步)
将我重定向到特定服务的UserController
public List<User>getUsers(){//no args!!
service.getUsers();//no args
}
UserService,具有访问数据库和检索所有用户的逻辑
public List<User>getUsers(){//no args!!
//connect to DB and retrieve all users
return users
}
在jsp上呈现用户
使用RabbitMQ并假设已经生成了用户,则显示了微服务方面的用户列表
我的问题是,如果我引入Rabbitmq,那么我需要一个方法来侦听消息(产品列表以JSON表示),但是与第一个消息流相比,现在的流程有所变化,因为
控制器需要一个方法findAll(Message message),在这里我需要传递一条消息,因为该服务需要一个消息,因为该服务是侦听器
public List<User>getUsers(Message message){
service.getAllUsers(**String message**);
}
目前的服务是收听消息,我需要传递消息 我将在其中监听队列的参数
@RabbitListener(queues = "${queue}", containerFactory = "fac")
public List<User> getUsers(String message){
//Transform JSON to POJO
//some logic...
return users;
}
所以基本上我的问题是第二个流程是否正确?
如果是这样,我如何将Message对象从控制器传递到服务 因为在控制器中我不需要消息,但是为了 听我说,这是正确的吗?
如果是这样,如何传递信息arg
有更好的方法可以实现这一目标吗?
致谢
答案 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方法)。