spring boot通过stomp协议实现通信功能

一、stomp协议简介

STOMP是简单(或流式)文本定向消息传递协议。

STOMP提供可互操作的有线格式,以便STOMP客户端可以与任何STOMP消息代理进行通信,从而在多种语言,平台和代理之间提供简单而广泛的消息传递互操作性。

二、在spring boot开发基于stomp的通信功能

1、在pom.xml中添加依赖

 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-messaging</artifactId>
        </dependency>
</dependencies>

如果你的spring boot版本高于1.5的话,要在配置文件中添加以下设置,否则在启动时会报错,因为高于1.5的它里面已经定义了subProtocolWebSocketHandler这个bean,与我们后面要定义的冲突了。

spring.main.allow-bean-definition-overriding=true

2、stomp配置


@Configuration
@EnableWebSocketMessageBroker
public class WebSocketStompConfig  extends WebSocketMessageBrokerConfigurationSupport implements WebSocketMessageBrokerConfigurer {

    @Override
    public void configureWebSocketTransport(WebSocketTransportRegistration registry) {
        super.configureWebSocketTransport(registry);
    }

    @Override
    public boolean configureMessageConverters(List<MessageConverter> messageConverters) {
        return super.configureMessageConverters(messageConverters);
    }

    @Override
    public void configureClientInboundChannel(ChannelRegistration registration) {
        super.configureClientInboundChannel(registration);
    }

    @Override
    public void configureClientOutboundChannel(ChannelRegistration registration) {
        super.configureClientOutboundChannel(registration);
    }


    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
        super.addArgumentResolvers(argumentResolvers);
    }

    @Override
    public void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> returnValueHandlers) {
        super.addReturnValueHandlers(returnValueHandlers);
    }

    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/stomp")
        .setHandshakeHandler(new DefaultHandshakeHandler() {
            @Override
            protected Principal determineUser(ServerHttpRequest request, WebSocketHandler wsHandler, Map<String, Object> attributes) {
                  //握手成功后调用,可以在这里保存用户id
                return new Principal(((ServletServerHttpRequest) request).getServletRequest().getParameter("name"));
            }
      })
                .setAllowedOrigins("*") // 添加允许跨域访问
                //添加socket拦截器,用于从请求中获取客户端标识参数
                .addInterceptors(new MyHandShakeInterceptor()).withSockJS();
        
    }
    
    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        //客户端发送消息的请求前缀
        registry.setApplicationDestinationPrefixes("/app");
        //客户端订阅消息的请求前缀,top
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值