首先先介绍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相关的备案的