programing

Springboot에 의한 스케줄된 웹 소켓 푸시

lovejava 2023. 3. 5. 09:16

Springboot에 의한 스케줄된 웹 소켓 푸시

웹 소켓 푸시 알림을 통해 자동으로 업데이트되는 간단한 뉴스 피드 기능을 프런트 엔드에 만들고 싶습니다.

관련된 테크놀로지는 다음과 같습니다.

  • 일반적인 프론트 엔드 애플리케이션에 적합한 각도
  • 웹 소켓 통신을 작성하기 위한 SockJ
  • 메시지 브로커로부터 메시지를 수신하기 위해 webosocket을 Stump over합니다.
  • 스프링 부트 웹 소켓
  • Stomp Message Broker(Java 관련 프레임워크)

프런트 엔드에서 달성하고 싶은 것은 다음과 같습니다.

  1. 보기가 로드될 때 웹 소켓 연결 만들기
  2. 해당 웹 소켓을 사용하여 sstomp 프로바이더를 만듭니다.
  3. 고객에게 구독을 의뢰하다
  4. 서버에서 푸시된 메시지를 캡처하여 각도 보기 업데이트

서버측 코드의 경우:

  1. 웹 소켓 구성 및 연결 관리
  2. 마다 ( "XXXX"를 ) .@Scheduled

서버측 코드의 마지막 부분을 제외하고 지금까지 모든 것을 달성했다고 생각합니다.이 예에서는 웹 소켓을 전이중 모드로 사용하고 있습니다.클라이언트가 무언가를 송신하면 서버는 즉시 메시지큐에 응답하여 모든 서브스크라이브된 클라이언트가 갱신됩니다. 제가 원하는 를 전송해 주는 것입니다.Stomp라라리

에 나는 샘을 .@Controller했습니다.@SendTo("/my/subscribed/path").하지만 어떻게 작동시켜야 할지 모르겠어요.그리고 나는 추가하려고 했다.@Scheduled그러나 이 주석은 다음 방법으로만 작동합니다.voidreturn type(「뉴스 메시지」)

기본적으로 필요한 것은 클라이언트가 웹 소켓 연결을 초기화하고 서버가 설정된 간격으로 메시지를 푸시하도록 하는 것입니다(또는 이벤트가 트리거될 때마다 현재로선 문제가 되지 않습니다).또한 모든 신규 클라이언트는 동일한 메시지큐를 듣고 동일한 메시지를 수신해야 합니다.

전에, 「」에 것을 .pom.xml예를 들어, 가장 중요한 것은 다음과 같습니다.

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-websocket</artifactId>
    <version>${org.springframework-version}</version>
</dependency>

그런 다음 구성을 설정해야 합니다.간단한 브로커부터 시작할 것을 제안합니다.

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/portfolio").withSockJS();
    }

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.setApplicationDestinationPrefixes("/app");
        config.enableSimpleBroker("/topic", "/queue");
    }

}

그러면 컨트롤러는 이렇게 됩니다.★★★★★★★★★★★의 경우AngularJs앱이 다음 날짜에 연결을 엽니다./portfolio채널로 구독을 전송합니다./topic/greeting컨트롤러에 접속하여 모든 서브스크라이버 사용자에게 응답합니다.

@Controller
public class GreetingController {
    
    @MessageMapping("/greeting")
    public String handle(String greeting) {
        return "[" + getTimestamp() + ": " + greeting;
    }
}

스케줄러 질문에 대해서는, 설정을 사용해 유효하게 할 필요가 있습니다.

@Configuration
@EnableScheduling
public class SchedulerConfig{}

그 다음 일정을 잡습니다.

@Component
public class ScheduledUpdatesOnTopic{

    @Autowired
    private SimpMessagingTemplate template;
    @Autowired
    private final MessagesSupplier messagesSupplier;

    @Scheduled(fixedDelay=300)
    public void publishUpdates(){
        template.convertAndSend("/topic/greetings", messagesSupplier.get());
    }
}

이것이 당신에게 도움이 되기 위해 취해야 할 개념과 절차를 명확히 해 주길 바랍니다.

우선, 클라이언트의 가입 없이는, 클라이언트에 메세지를 송신(푸시)할 수 없습니다.

다음으로 모든 사용자에게 메시지를 발송하려면topic추상화면

그것은 STOMP의 기본이다.

당신은 괜찮으실 것 같아요.@Scheduled하지만 주사만 하면 돼SimpMessagingTemplate나중에 푸시하기 위해 STOMP 브로커에게 메시지를 보냅니다.

brokerMessagingTemplate를 제공하지 않는 Spring WebSockets XML 구성도 참조하십시오.

언급URL : https://stackoverflow.com/questions/37307697/scheduled-websocket-push-with-springboot