@RestController
@RequestMapping("/api/producer")
public class ProducerController {
@Autowired
private SimpMessagingTemplate messagingTemplate;
private UserAuditRepository userAuditRepository;
private static final Logger logger = LoggerFactory.getLogger(ProducerController.class);
@Autowired
public ProducerController(UserAuditRepository userAuditRepository) {
this.userAuditRepository = userAuditRepository;
}
@PostMapping("/send-message/{userId}")
public ModelAndView sendMessageToUser(@PathVariable String userId) {
logger.info("Sending message to user: {}", userId);
// Проверяем существование пользователя
Optional<UserAudit> existingUser = userAuditRepository.findByUserId(userId);
UserAudit userAudit = existingUser.orElseGet(() -> {
UserAudit newUser = new UserAudit();
newUser.setUserId(userId);
return newUser;
});
MessageDto messageDto = new MessageDto(true, "gold", 123, "Hello World", userId);
messagingTemplate.convertAndSendToUser(userId, "/topic/messages", messageDto);
// После отправки сообщения, перенаправляем пользователя на страницу user-audit
return new ModelAndView(new RedirectView("/consumersocket/api/consumer/user-audit", true));
}
}
个字符
两个微服务都启动了,输入密码后,从生产者到消费者的消息没有到达,消息没有写入数据库。http://localhost:8080/producersocket/api/producer/send-message server.servlet.context-path=/producersocket http://localhost:8081/consumersocket/api/consumer/user-audit
URL写得不一样,没什么帮助
1条答案
按热度按时间r6l8ljro1#
processMessageFromProducer
方法中的注解值似乎不正确。当在生成器中触发
convertAndSendToUser
时,消息将发送到/user/{sessionId}/topic/messages
通道。但是,使用者正在侦听/messages
通道。另外,
@SendToUser
会将方法结果以消息的形式发送到指定的通道。但是,由于processMessageFromProducer
是一个void方法,我认为它不会正确工作。您可以尝试以下更改:
字符串