Skip to content

Commit

Permalink
Add messaging template
Browse files Browse the repository at this point in the history
  • Loading branch information
Fagorym committed Apr 3, 2024
1 parent 0509b83 commit 7fd3a34
Show file tree
Hide file tree
Showing 6 changed files with 48 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,15 @@ public class WebSocketConfiguration implements WebSocketMessageBrokerConfigurer
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/business");
config.setApplicationDestinationPrefixes("/user");
}

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/business/chat")
registry.addEndpoint("/user/chat")
.setAllowedOriginPatterns("*")
.withSockJS();
registry.addEndpoint("/business/chat")
registry.addEndpoint("/user/chat")
.setAllowedOriginPatterns("*");
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package ru.nsu.fit.directors.userservice.event;

public record BusinessMessageEvent(Long userId, Long orderId, String message) {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package ru.nsu.fit.directors.userservice.listener;

import javax.annotation.ParametersAreNonnullByDefault;

import lombok.RequiredArgsConstructor;
import org.springframework.kafka.annotation.KafkaHandler;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;
import ru.nsu.fit.directors.userservice.event.BusinessMessageEvent;
import ru.nsu.fit.directors.userservice.service.ChatService;

@Component
@RequiredArgsConstructor
@ParametersAreNonnullByDefault
@KafkaListener(topics = "chatTopic")
public class ChatTopicListener {
private final ChatService chatService;

@KafkaHandler
public void handleMessage(BusinessMessageEvent businessMessageEvent) {
chatService.handleMessage(businessMessageEvent);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

import ru.nsu.fit.directors.userservice.dto.MessageDto;
import ru.nsu.fit.directors.userservice.dto.request.ChatMessage;
import ru.nsu.fit.directors.userservice.event.BusinessMessageEvent;

@ParametersAreNonnullByDefault
public interface ChatService {
Expand All @@ -24,4 +25,11 @@ public interface ChatService {
*/
@Nonnull
List<MessageDto> getChat(Long orderId);

/**
* Обработать входящее сообщение
*
* @param businessMessageEvent входящее сообщение
*/
void handleMessage(BusinessMessageEvent businessMessageEvent);
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,12 @@

import lombok.RequiredArgsConstructor;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Service;
import ru.nsu.fit.directors.userservice.api.OrderServiceClient;
import ru.nsu.fit.directors.userservice.dto.MessageDto;
import ru.nsu.fit.directors.userservice.dto.request.ChatMessage;
import ru.nsu.fit.directors.userservice.event.BusinessMessageEvent;
import ru.nsu.fit.directors.userservice.event.UserMessageEvent;
import ru.nsu.fit.directors.userservice.model.User;

Expand All @@ -23,6 +25,7 @@ public class ChatServiceImpl implements ChatService {
private final KafkaTemplate<String, UserMessageEvent> kafkaTemplate;
private final SecurityService securityService;
private final OrderServiceClient orderServiceClient;
private final SimpMessagingTemplate simpMessagingTemplate;

@Override
public void save(ChatMessage chatMessage, Long orderId) {
Expand All @@ -39,4 +42,9 @@ public List<MessageDto> getChat(Long orderId) {
User user = securityService.getLoggedInUser();
return Objects.requireNonNull(orderServiceClient.getMessages(user.getId(), orderId).getBody()).getResult();
}

@Override
public void handleMessage(BusinessMessageEvent businessMessageEvent) {
simpMessagingTemplate.convertAndSend("/topic/" + businessMessageEvent.orderId(), businessMessageEvent);
}
}
3 changes: 2 additions & 1 deletion src/main/resources/application.properties
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@ spring.kafka.template.default-topic=orderTopic

spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
spring.kafka.consumer.value-deserializer=org.springframework.kafka.support.serializer.JsonDeserializer
spring.kafka.consumer.properties.spring.json.type.mapping=notification:ru.nsu.fit.directors.userservice.event.OrderNotificationEvent
spring.kafka.consumer.properties.spring.json.type.mapping=notification:ru.nsu.fit.directors.userservice.event.OrderNotificationEvent,\
business-message:ru.nsu.fit.directors.userservice.event.BusinessMessageEvent

springdoc.swagger-ui.path=/user/swagger-ui.html
springdoc.api-docs.path=/user/api-docs
Expand Down

0 comments on commit 7fd3a34

Please sign in to comment.