Spring boot集成websocket(二)----基于注解的方式

首先先介绍spring boot和websocket的集成,基于注解的方式

修改启动类增加Enable配置

//启动websocket的支持
@EnableWebSocket

增加配置类

@Configuration
public class WebSocketConfig {
	
	@Bean
	public ServerEndpointExporter serverEndpointExporter() {
		return new ServerEndpointExporter();
	}
}

配置hndler

@ServerEndpoint(value = "/webscoket/call/{ID}")
@Component
public class CTIHandler extends ParentHandler implements CallBackService{
	/**
	 * 配置日志
	 */
	private final static Logger logger = LoggerFactory.getLogger(CTIHandler.class);
    /**
     * 连接
     * @param session
     * @throws Exception
     */
	@OnOpen
    public void onOpen(Session session,@PathParam("ID") String userName,EndpointConfig config) throws Exception {
    	logger.info("获取当前"+socketMap.get(userName));
    	if(socketMap.get(userName)==null) {
    		socketMap.put(userName,session);
    	}
    	AliyunMessageService aliyunMessageService =  (AliyunMessageService) SpringUtil.getBean("aliyunMessageService");
    	//根据用户角色匹配响应的频道和标签,然后进行消息订阅
    	aliyunMessageService.subscription("DEV_ZHUBANXIAN_MQ", "T2", this);
    	logger.info("链接成功");
    }

    /**
     * 接收socket信息
     */
	@OnMessage
    public void onMessage(String message, Session session) throws Exception {
    	logger.info("收到的消息"+message);
    }

	/**
	 * 连接出错
	 */
	@OnError
    public void onError(Session session, Throwable error) throws Exception {
        if (session.isOpen()) {
            session.close();
        }
        logger.info("连接出错"+error);
    }
    /**
     * 连接关闭
     */
	@OnClose
    public void onClose(@PathParam("ID") String userName) throws Exception {
    	if(socketMap.get(userName)!=null) {
    		socketMap.remove(userName);
    	}
        logger.info("连接已关闭:" + userName);
    }

	@Override
	public void dealReceive(String message) {
		// TODO Auto-generated method stub
		sendMessageToUser("sales01", message);
	}
}

springutil是用来在websocket中注入spring相关的备案的

猜你喜欢

转载自blog.csdn.net/zhuwei_clark/article/details/83899174
今日推荐