小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Spring 4 + Websocket + Stomp + ActimeMQ 實(shí)現(xiàn)消息推送

 WindySky 2017-09-09
一:代碼結(jié)構(gòu)

二: pom.xml文件
<project

: web.xml文件

: spring-servlet.xml文件

: WebSocketConfig.java文件
package com.gemdale.gmap.message.dispatch.center;
import java.util.List;
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.converter.MessageConverter;
import org.springframework.messaging.handler.invocation.HandlerMethodArgumentResolver;
import org.springframework.messaging.handler.invocation.HandlerMethodReturnValueHandler;
import org.springframework.messaging.simp.config.ChannelRegistration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.util.AntPathMatcher;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketTransportRegistration;
import com.gemdale.gmap.common.util.ConfigureUtil;

/**
 * TODO:
 * 
 * @author gengchong
 * @date 2015年10月20日 下午5:13:17
 */
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {


    /*
     * 服務(wù)器要監(jiān)聽的端口,message會(huì)從這里進(jìn)來(lái),要對(duì)這里加一個(gè)Handler
     * 這樣在網(wǎng)頁(yè)中就可以通過(guò)websocket連接上服務(wù)了
     */
    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/websocket")//websocket 端點(diǎn)
                .setAllowedOrigins("*")
                .setHandshakeHandler(new HandshakeHandler())
                .addInterceptors(new HandshakeInterceptor()).withSockJS();
    }


    /*
     * 消息傳輸參數(shù)配置 
     */
    @Override
    public void configureWebSocketTransport(WebSocketTransportRegistration registry) {
        registry.setMessageSizeLimit(8192) //設(shè)置消息字節(jié)數(shù)大小
        .setSendBufferSizeLimit(8192)//設(shè)置消息緩存大小
        .setSendTimeLimit(10000); //設(shè)置消息發(fā)送時(shí)間限制毫秒
    }


    /*
     * 輸入通道參數(shù)設(shè)置
     */
    @Override
    public void configureClientInboundChannel(ChannelRegistration registration) {
        registration.taskExecutor().corePoolSize(4) //設(shè)置消息輸入通道的線程池線程數(shù)
        .maxPoolSize(8)//最大線程數(shù)
        .keepAliveSeconds(60);//線程活動(dòng)時(shí)間
    }


    /*
     * 輸出通道參數(shù)設(shè)置
     */
    @Override
    public void configureClientOutboundChannel(ChannelRegistration registration) {
        registration.taskExecutor().corePoolSize(4).maxPoolSize(8);
    }

    @Override
    public void addArgumentResolvers(List argumentResolvers) {
    }

    @Override
    public void addReturnValueHandlers(List returnValueHandlers) {
    }

    @Override
    public boolean configureMessageConverters(List messageConverters) {
        return true;
    }

    /*
     * 配置broker
     */
    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        registry.enableStompBrokerRelay("/topic") // 設(shè)置可以訂閱的地址,也就是服務(wù)器可以發(fā)送的地址
                .setRelayHost(ConfigureUtil.getProperty("BrokerUrl")).setRelayPort(Integer.valueOf(ConfigureUtil.getProperty("BrokerPort"))) // 設(shè)置broker的地址及端口號(hào)
                .setSystemHeartbeatReceiveInterval(2000) // 設(shè)置心跳信息接收時(shí)間間隔
                .setSystemHeartbeatSendInterval(2000); // 設(shè)置心跳信息發(fā)送時(shí)間間隔
        registry.setApplicationDestinationPrefixes("/ws");
    }

}

: HandshakeHandler.java文件

/**
 * TODO:
 * 
 * @author gengchong
 * @date 2015年10月20日 下午5:02:35
 */
public class HandshakeHandler extends DefaultHandshakeHandler{
    
    private static Logger logger = Logger.getLogger(HandshakeHandler.class);
   
}

: HandshakeInterceptor.java文件

public class HandshakeInterceptor extends HttpSessionHandshakeInterceptor {
private static Logger logger = Logger.getLogger(HandshakeInterceptor.class);
    @Override
    public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler,
            Map attributes) throws Exception {
        logger.info("============Before Handshake===========");
        return super.beforeHandshake(request, response, wsHandler, attributes);
    }
    @Override
    public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler,
            Exception ex) {
        logger.info("============After Handshake==============");
        super.afterHandshake(request, response, wsHandler, ex);
    }
}

: GreetingController.java文件

public class GreetingController {
    
    @MessageMapping("/hello")
    @SendTo("/topic/gmapws")
    public Greeting greeting(HelloMessage message)
    {
        try {
            return new Greeting("Hello, "+message.getName() + " !");
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        
        return null;
    }


}

: HelloMessage .java文件

public class HelloMessage {


    private String name;


    /**
     * @return the name
     */
    public String getName() {
        return name;
    }


    /**
     * @param name the name to set
     */
    public void setName(String name) {
        this.name = name;
    }
    
}

: Greeting.java文件

public class Greeting {
 private String content;
 
 
 public Greeting(String content)
 {
     this.content=content;
 }


/**
 * @return the content
 */
public String getContent() {
    return content;
}


/**
 * @param content the content to set
 */
public void setContent(String content) {
    this.content = content;
}
 
}

: index.html文件



</project

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多