作者 crossoverJie

:recycle: Refactoring code.

正在显示 31 个修改的文件 包含 663 行增加67 行删除
package com.crossoverjie.cim.client;
import com.crossoverjie.cim.client.client.CIMClient;
import com.crossoverjie.cim.client.scanner.Scan;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
... ... @@ -17,7 +18,7 @@ public class CIMClientApplication implements CommandLineRunner{
private final static Logger LOGGER = LoggerFactory.getLogger(CIMClientApplication.class);
@Autowired
private HeartbeatClient heartbeatClient ;
private CIMClient heartbeatClient ;
public static void main(String[] args) {
... ...
package com.crossoverjie.cim.client;
package com.crossoverjie.cim.client.client;
import com.alibaba.fastjson.JSON;
import com.crossoverjie.cim.client.init.CustomerHandleInitializer;
... ... @@ -29,9 +29,9 @@ import javax.annotation.PostConstruct;
* @since JDK 1.8
*/
@Component
public class HeartbeatClient {
public class CIMClient {
private final static Logger LOGGER = LoggerFactory.getLogger(HeartbeatClient.class);
private final static Logger LOGGER = LoggerFactory.getLogger(CIMClient.class);
private EventLoopGroup group = new NioEventLoopGroup();
... ...
package com.crossoverjie.cim.client.controller;
import com.crossoverjie.cim.client.HeartbeatClient;
import com.crossoverjie.cim.client.client.CIMClient;
import com.crossoverjie.cim.client.vo.req.SendMsgReqVO;
import com.crossoverjie.cim.client.vo.res.SendMsgResVO;
import com.crossoverjie.cim.client.vo.req.GoogleProtocolVO;
... ... @@ -38,7 +38,7 @@ public class IndexController {
private CounterService counterService;
@Autowired
private HeartbeatClient heartbeatClient ;
private CIMClient heartbeatClient ;
... ...
package com.crossoverjie.cim.client.scanner;
import com.crossoverjie.cim.client.HeartbeatClient;
import com.crossoverjie.cim.client.client.CIMClient;
import com.crossoverjie.cim.client.vo.req.GoogleProtocolVO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
... ... @@ -18,9 +18,9 @@ public class Scan implements Runnable{
private final static Logger LOGGER = LoggerFactory.getLogger(Scan.class);
private HeartbeatClient heartbeatClient ;
private CIMClient heartbeatClient ;
public Scan(HeartbeatClient heartbeatClient) {
public Scan(CIMClient heartbeatClient) {
this.heartbeatClient = heartbeatClient;
}
... ...
... ... @@ -27,6 +27,12 @@
<dependency>
<groupId>com.crossoverjie.netty</groupId>
<artifactId>cim-common</artifactId>
<exclusions>
<exclusion>
<artifactId>log4j</artifactId>
<groupId>log4j</groupId>
</exclusion>
</exclusions>
</dependency>
... ...
package com.crossoverjie.cim.route;
import com.crossoverjie.cim.route.kit.ServerListListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
... ... @@ -9,7 +11,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
* @author crossoverJie
*/
@SpringBootApplication
public class RouteApplication {
public class RouteApplication implements CommandLineRunner{
private final static Logger LOGGER = LoggerFactory.getLogger(RouteApplication.class);
... ... @@ -18,4 +20,12 @@ public class RouteApplication {
LOGGER.info("启动 route 成功");
}
@Override
public void run(String... args) throws Exception {
//监听服务
Thread thread = new Thread(new ServerListListener());
thread.setName("zk-listener");
thread.start() ;
}
}
\ No newline at end of file
... ...
package com.crossoverjie.cim.route.cache;
import com.crossoverjie.cim.route.kit.ZKit;
import com.google.common.cache.LoadingCache;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicLong;
/**
* Function: 服务器节点缓存
*
* @author crossoverJie
* Date: 2018/8/19 01:31
* @since JDK 1.8
*/
@Component
public class ServerCache {
@Autowired
private LoadingCache<String, String> cache;
@Autowired
private ZKit zkUtil;
private AtomicLong index = new AtomicLong();
public void addCache(String key) {
cache.put(key, key);
}
/**
* 更新所有缓存/先删除 再新增
*
* @param currentChilds
*/
public void updateCache(List<String> currentChilds) {
cache.invalidateAll();
for (String currentChild : currentChilds) {
String key = currentChild.split("-")[1];
addCache(key);
}
}
/**
* 获取所有的服务列表
*
* @return
*/
public List<String> getAll() {
List<String> list = new ArrayList<>();
if (cache.size() == 0) {
List<String> allNode = zkUtil.getAllNode();
for (String node : allNode) {
String key = node.split("-")[1];
addCache(key);
}
}
for (Map.Entry<String, String> entry : cache.asMap().entrySet()) {
list.add(entry.getKey());
}
return list;
}
/**
* 选取服务器
*
* @return
*/
public String selectServer() {
List<String> all = getAll();
if (all.size() == 0) {
throw new RuntimeException("路由列表为空");
}
Long position = index.incrementAndGet() % all.size();
if (position < 0) {
position = 0L;
}
return all.get(position.intValue());
}
}
... ...
package com.crossoverjie.cim.route.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* Function:
*
* @author crossoverJie
* Date: 2018/8/24 01:43
* @since JDK 1.8
*/
@Component
public class AppConfiguration {
@Value("${app.zk.root}")
private String zkRoot;
@Value("${app.zk.addr}")
private String zkAddr;
@Value("${server.port}")
private int port;
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
public String getZkRoot() {
return zkRoot;
}
public void setZkRoot(String zkRoot) {
this.zkRoot = zkRoot;
}
public String getZkAddr() {
return zkAddr;
}
public void setZkAddr(String zkAddr) {
this.zkAddr = zkAddr;
}
}
... ...
package com.crossoverjie.cim.route.config;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import org.I0Itec.zkclient.ZkClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Function:
*
* @author crossoverJie
* Date: 2018/12/23 00:25
* @since JDK 1.8
*/
@Configuration
public class BeanConfig {
@Autowired
private AppConfiguration appConfiguration ;
@Bean
public ZkClient buildZKClient(){
return new ZkClient(appConfiguration.getZkAddr(), 5000);
}
@Bean
public LoadingCache<String,String> buildCache(){
return CacheBuilder.newBuilder()
.build(new CacheLoader<String, String>() {
@Override
public String load(String s) throws Exception {
return null;
}
});
}
}
... ...
package com.crossoverjie.cim.route.controller;
import com.crossoverjie.cim.route.vo.req.P2PRequest;
import com.crossoverjie.cim.route.vo.req.GroupRequest;
import com.crossoverjie.cim.common.enums.StatusEnum;
import com.crossoverjie.cim.common.res.BaseResponse;
import com.crossoverjie.cim.common.res.NULLBody;
import com.crossoverjie.cim.route.cache.ServerCache;
import com.crossoverjie.cim.route.vo.req.GroupRequest;
import com.crossoverjie.cim.route.vo.req.P2PRequest;
import com.crossoverjie.cim.route.vo.res.CIMServerResVO;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
... ... @@ -25,11 +29,14 @@ import org.springframework.web.bind.annotation.ResponseBody;
public class RouteController {
private final static Logger LOGGER = LoggerFactory.getLogger(RouteController.class);
@Autowired
private ServerCache serverCache ;
@ApiOperation("群聊 API")
@RequestMapping(value = "groupRoute",method = RequestMethod.POST)
@ResponseBody()
public BaseResponse groupRoute(@RequestBody GroupRequest groupRequest){
BaseResponse res = new BaseResponse();
public BaseResponse<NULLBody> groupRoute(@RequestBody GroupRequest groupRequest){
BaseResponse<NULLBody> res = new BaseResponse();
LOGGER.info("msg=[{}]",groupRequest.toString());
... ... @@ -47,13 +54,35 @@ public class RouteController {
@ApiOperation("私聊 API")
@RequestMapping(value = "p2pRoute",method = RequestMethod.POST)
@ResponseBody()
public BaseResponse p2pRoute(@RequestBody P2PRequest p2pRequest){
BaseResponse res = new BaseResponse();
public BaseResponse<NULLBody> p2pRoute(@RequestBody P2PRequest p2pRequest){
BaseResponse<NULLBody> res = new BaseResponse();
res.setCode(StatusEnum.SUCCESS.getCode()) ;
res.setMessage(StatusEnum.SUCCESS.getMessage()) ;
return res ;
}
/**
* 获取一台 CIM server
* @return
*/
@ApiOperation("获取服务器")
@RequestMapping(value = "getCIMServer",method = RequestMethod.POST)
@ResponseBody()
public BaseResponse<CIMServerResVO> getCIMServer(){
BaseResponse<CIMServerResVO> res = new BaseResponse();
String server = serverCache.selectServer();
String[] serverInfo = server.split(":");
CIMServerResVO vo = new CIMServerResVO(serverInfo[0],Integer.parseInt(serverInfo[1])) ;
res.setDataBody(vo);
res.setCode(StatusEnum.SUCCESS.getCode()) ;
res.setMessage(StatusEnum.SUCCESS.getMessage()) ;
return res ;
}
}
... ...
package com.crossoverjie.cim.route.kit;
import com.crossoverjie.cim.route.config.AppConfiguration;
import com.crossoverjie.cim.route.util.SpringBeanFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Function:
*
* @author crossoverJie
* Date: 2018/12/23 00:35
* @since JDK 1.8
*/
public class ServerListListener implements Runnable{
private static Logger logger = LoggerFactory.getLogger(ServerListListener.class);
private ZKit zkUtil;
private AppConfiguration appConfiguration ;
public ServerListListener() {
zkUtil = SpringBeanFactory.getBean(ZKit.class) ;
appConfiguration = SpringBeanFactory.getBean(AppConfiguration.class) ;
}
@Override
public void run() {
//注册监听服务
zkUtil.subscribeEvent(appConfiguration.getZkRoot());
}
}
... ...
package com.crossoverjie.cim.route.kit;
import com.alibaba.fastjson.JSON;
import com.crossoverjie.cim.route.cache.ServerCache;
import org.I0Itec.zkclient.IZkChildListener;
import org.I0Itec.zkclient.ZkClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* Function: Zookeeper 工具
*
* @author crossoverJie
* Date: 2018/8/19 00:33
* @since JDK 1.8
*/
@Component
public class ZKit {
private static Logger logger = LoggerFactory.getLogger(ZKit.class);
@Autowired
private ZkClient zkClient;
@Autowired
private ServerCache serverCache ;
/**
* 监听事件
*
* @param path
*/
public void subscribeEvent(String path) {
zkClient.subscribeChildChanges(path, new IZkChildListener() {
@Override
public void handleChildChange(String parentPath, List<String> currentChilds) throws Exception {
logger.info("清除/更新本地缓存 parentPath=【{}】,currentChilds=【{}】", parentPath,currentChilds.toString());
//更新所有缓存/先删除 再新增
serverCache.updateCache(currentChilds) ;
}
});
}
/**
* 获取所有注册节点
* @return
*/
public List<String> getAllNode(){
List<String> children = zkClient.getChildren("/route");
logger.info("查询所有节点成功=【{}】", JSON.toJSONString(children));
return children;
}
}
... ...
package com.crossoverjie.cim.route.util;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public final class SpringBeanFactory implements ApplicationContextAware{
private static ApplicationContext context;
public static <T> T getBean(Class<T> c){
return context.getBean(c);
}
public static <T> T getBean(String name,Class<T> clazz){
return context.getBean(name,clazz);
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
context = applicationContext;
}
}
... ...
package com.crossoverjie.cim.route.vo.res;
import java.io.Serializable;
/**
* Function:
*
* @author crossoverJie
* Date: 2018/12/23 00:43
* @since JDK 1.8
*/
public class CIMServerResVO implements Serializable {
private String ip ;
private Integer port;
public CIMServerResVO(String ip, Integer port) {
this.ip = ip;
this.port = port;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public Integer getPort() {
return port;
}
public void setPort(Integer port) {
this.port = port;
}
@Override
public String toString() {
return "CIMServerResVO{" +
"ip='" + ip + '\'' +
", port=" + port +
'}';
}
}
... ...
... ... @@ -12,3 +12,9 @@ logging.level.root=info
# 关闭健康检查权限
management.security.enabled=false
# zk 地址
app.zk.addr=47.98.194.60:2181
# zk 注册根节点
app.zk.root=/route
... ...
... ... @@ -29,6 +29,12 @@
<dependency>
<groupId>com.crossoverjie.netty</groupId>
<artifactId>cim-common</artifactId>
<exclusions>
<exclusion>
<artifactId>log4j</artifactId>
<groupId>log4j</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
... ...
package com.crossoverjie.cim.server;
import com.crossoverjie.cim.server.config.AppConfiguration;
import com.crossoverjie.cim.server.kit.RegistryZK;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import java.net.InetAddress;
/**
* @author crossoverJie
*/
@SpringBootApplication
public class CIMServerApplication {
public class CIMServerApplication implements CommandLineRunner{
private final static Logger LOGGER = LoggerFactory.getLogger(CIMServerApplication.class);
@Autowired
private AppConfiguration appConfiguration ;
public static void main(String[] args) {
SpringApplication.run(CIMServerApplication.class, args);
LOGGER.info("启动 Server 成功");
}
@Override
public void run(String... args) throws Exception {
//获得本机IP
String addr = InetAddress.getLocalHost().getHostAddress();
Thread thread = new Thread(new RegistryZK(addr, appConfiguration.getPort()));
thread.setName("registry-zk");
thread.start() ;
}
}
\ No newline at end of file
... ...
package com.crossoverjie.cim.server.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* Function:
*
* @author crossoverJie
* Date: 2018/8/24 01:43
* @since JDK 1.8
*/
@Component
public class AppConfiguration {
@Value("${app.zk.root}")
private String zkRoot;
@Value("${app.zk.addr}")
private String zkAddr;
@Value("${app.zk.switch}")
private boolean zkSwitch;
@Value("${server.port}")
private int port;
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
public String getZkRoot() {
return zkRoot;
}
public void setZkRoot(String zkRoot) {
this.zkRoot = zkRoot;
}
public String getZkAddr() {
return zkAddr;
}
public void setZkAddr(String zkAddr) {
this.zkAddr = zkAddr;
}
public boolean isZkSwitch() {
return zkSwitch;
}
public void setZkSwitch(boolean zkSwitch) {
this.zkSwitch = zkSwitch;
}
}
... ...
package com.crossoverjie.cim.server.config;
import org.I0Itec.zkclient.ZkClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Function:
*
* @author crossoverJie
* Date: 2018/12/23 00:25
* @since JDK 1.8
*/
@Configuration
public class BeanConfig {
@Autowired
private AppConfiguration appConfiguration ;
@Bean
public ZkClient buildZKClient(){
return new ZkClient(appConfiguration.getZkAddr(), 5000);
}
}
... ...
... ... @@ -4,7 +4,7 @@ import com.crossoverjie.cim.common.enums.StatusEnum;
import com.crossoverjie.cim.common.res.BaseResponse;
import com.crossoverjie.cim.server.vo.req.SendMsgReqVO;
import com.crossoverjie.cim.common.constant.Constants;
import com.crossoverjie.cim.server.server.HeartBeatServer;
import com.crossoverjie.cim.server.server.CIMServer;
import com.crossoverjie.cim.server.vo.res.SendMsgResVO;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
... ... @@ -27,7 +27,7 @@ import org.springframework.web.bind.annotation.ResponseBody;
public class IndexController {
@Autowired
private HeartBeatServer heartbeatClient ;
private CIMServer heartbeatClient ;
/**
... ...
... ... @@ -3,13 +3,9 @@ package com.crossoverjie.cim.server.handle;
import com.crossoverjie.cim.common.protocol.BaseRequestProto;
import com.crossoverjie.cim.common.protocol.BaseResponseProto;
import com.crossoverjie.cim.server.util.NettySocketHolder;
import com.crossoverjie.cim.common.pojo.CustomProtocol;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.netty.util.CharsetUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
... ... @@ -20,11 +16,9 @@ import org.slf4j.LoggerFactory;
* Date: 17/05/2018 18:52
* @since JDK 1.8
*/
public class HeartBeatSimpleHandle extends SimpleChannelInboundHandler<BaseRequestProto.RequestProtocol> {
public class ServerHandle extends SimpleChannelInboundHandler<BaseRequestProto.RequestProtocol> {
private final static Logger LOGGER = LoggerFactory.getLogger(HeartBeatSimpleHandle.class);
private static final ByteBuf HEART_BEAT = Unpooled.unreleasableBuffer(Unpooled.copiedBuffer(new CustomProtocol(123456L,"pong").toString(),CharsetUtil.UTF_8));
private final static Logger LOGGER = LoggerFactory.getLogger(ServerHandle.class);
/**
... ... @@ -34,26 +28,12 @@ public class HeartBeatSimpleHandle extends SimpleChannelInboundHandler<BaseReque
*/
@Override
public void channelInactive(ChannelHandlerContext ctx) throws Exception {
NettySocketHolder.remove((NioSocketChannel) ctx.channel());
}
@Override
public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
/*if (evt instanceof IdleStateEvent){
IdleStateEvent idleStateEvent = (IdleStateEvent) evt ;
if (idleStateEvent.state() == IdleState.READER_IDLE){
LOGGER.info("已经5秒没有收到信息!");
//向客户端发送消息
ctx.writeAndFlush(HEART_BEAT).addListener(ChannelFutureListener.CLOSE_ON_FAILURE) ;
}
}*/
super.userEventTriggered(ctx, evt);
public void channelActive(ChannelHandlerContext ctx) throws Exception {
LOGGER.info("有客户端连上来了。。");
}
@Override
... ...
package com.crossoverjie.cim.server.init;
import com.crossoverjie.cim.common.protocol.BaseRequestProto;
import com.crossoverjie.cim.server.handle.HeartBeatSimpleHandle;
import com.crossoverjie.cim.server.handle.ServerHandle;
import io.netty.channel.Channel;
import io.netty.channel.ChannelInitializer;
import io.netty.handler.codec.protobuf.ProtobufDecoder;
import io.netty.handler.codec.protobuf.ProtobufEncoder;
import io.netty.handler.codec.protobuf.ProtobufVarint32FrameDecoder;
import io.netty.handler.codec.protobuf.ProtobufVarint32LengthFieldPrepender;
import io.netty.handler.timeout.IdleStateHandler;
/**
* Function:
... ... @@ -18,23 +17,18 @@ import io.netty.handler.timeout.IdleStateHandler;
* @since JDK 1.8
*/
public class HeartbeatInitializer extends ChannelInitializer<Channel> {
private final ServerHandle serverHandle = new ServerHandle();
@Override
protected void initChannel(Channel ch) throws Exception {
ch.pipeline()
//五秒没有收到消息 将IdleStateHandler 添加到 ChannelPipeline 中
.addLast(new IdleStateHandler(5, 0, 0))
//.addLast(new HeartbeatDecoder())
//字符串解析,换行防拆包
//.addLast(new LineBasedFrameDecoder(1024))
//.addLast(new StringDecoder())
ch.pipeline()
// google Protobuf 编解码
.addLast(new ProtobufVarint32FrameDecoder())
.addLast(new ProtobufDecoder(BaseRequestProto.RequestProtocol.getDefaultInstance()))
.addLast(new ProtobufVarint32LengthFieldPrepender())
.addLast(new ProtobufEncoder())
.addLast(new HeartBeatSimpleHandle());
.addLast(serverHandle);
}
}
... ...
package com.crossoverjie.cim.server.kit;
import com.crossoverjie.cim.server.config.AppConfiguration;
import com.crossoverjie.cim.server.util.SpringBeanFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Function:
*
* @author crossoverJie
* Date: 2018/8/24 01:37
* @since JDK 1.8
*/
public class RegistryZK implements Runnable {
private static Logger logger = LoggerFactory.getLogger(RegistryZK.class);
private ZKit zKit;
private AppConfiguration appConfiguration ;
private String ip;
private int port;
public RegistryZK(String ip, int port) {
this.ip = ip;
this.port = port;
zKit = SpringBeanFactory.getBean(ZKit.class) ;
appConfiguration = SpringBeanFactory.getBean(AppConfiguration.class) ;
}
@Override
public void run() {
//创建父节点
zKit.createRootNode();
//是否要将自己注册到 ZK
if (appConfiguration.isZkSwitch()){
String path = appConfiguration.getZkRoot() + "/ip-" + ip + ":" + port;
zKit.createNode(path, path);
logger.info("注册 zookeeper 成功,msg=[{}]", path);
}
}
}
\ No newline at end of file
... ...
package com.crossoverjie.cim.server.kit;
import com.crossoverjie.cim.server.config.AppConfiguration;
import org.I0Itec.zkclient.ZkClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* Function: Zookeeper 工具
*
* @author crossoverJie
* Date: 2018/8/19 00:33
* @since JDK 1.8
*/
@Component
public class ZKit {
private static Logger logger = LoggerFactory.getLogger(ZKit.class);
@Autowired
private ZkClient zkClient;
@Autowired
private AppConfiguration appConfiguration ;
/**
* 创建父级节点
*/
public void createRootNode(){
boolean exists = zkClient.exists(appConfiguration.getZkRoot());
if (exists){
return;
}
//创建 root
zkClient.createPersistent(appConfiguration.getZkRoot()) ;
}
/**
* 写入指定节点 临时目录
*
* @param path
* @param value
*/
public void createNode(String path, String value) {
zkClient.createEphemeral(path, value);
}
}
... ...
... ... @@ -33,9 +33,9 @@ import java.net.InetSocketAddress;
* @since JDK 1.8
*/
@Component
public class HeartBeatServer {
public class CIMServer {
private final static Logger LOGGER = LoggerFactory.getLogger(HeartBeatServer.class);
private final static Logger LOGGER = LoggerFactory.getLogger(CIMServer.class);
private EventLoopGroup boss = new NioEventLoopGroup();
private EventLoopGroup work = new NioEventLoopGroup();
... ...
... ... @@ -18,3 +18,13 @@ spring.boot.admin.url=http://127.0.0.1:8888
#自定义监控端点 key
monitor.channel.map.key=channelMap
# 是否注册 zk
app.zk.switch=true
# zk 地址
app.zk.addr=47.98.194.60:2181
# zk 注册根节点
app.zk.root=/route
\ No newline at end of file
... ...
... ... @@ -2,7 +2,7 @@ package com.crossoverjie.cim.server.zk;
import com.crossoverjie.cim.server.zk.util.AppConfiguration;
import com.crossoverjie.cim.server.zk.thread.RegistryZK;
import com.crossoverjie.cim.server.zk.util.ZKUtil;
import com.crossoverjie.cim.server.zk.util.ZKit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
... ... @@ -24,7 +24,7 @@ public class Application implements CommandLineRunner{
private AppConfiguration appConfiguration ;
@Autowired
private static ZKUtil zkUtil ;
private static ZKit zkUtil ;
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
... ...
package com.crossoverjie.cim.server.zk.cache;
import com.crossoverjie.cim.server.zk.util.ZKUtil;
import com.crossoverjie.cim.server.zk.util.ZKit;
import com.google.common.cache.LoadingCache;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
... ... @@ -25,7 +25,7 @@ public class ServerCache {
private LoadingCache<String, String> cache;
@Autowired
private ZKUtil zkUtil;
private ZKit zkUtil;
private AtomicLong index = new AtomicLong();
... ...
... ... @@ -2,7 +2,7 @@ package com.crossoverjie.cim.server.zk.thread;
import com.crossoverjie.cim.server.zk.util.AppConfiguration;
import com.crossoverjie.cim.server.zk.util.SpringBeanFactory;
import com.crossoverjie.cim.server.zk.util.ZKUtil;
import com.crossoverjie.cim.server.zk.util.ZKit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
... ... @@ -17,7 +17,7 @@ public class RegistryZK implements Runnable {
private static Logger logger = LoggerFactory.getLogger(RegistryZK.class);
private ZKUtil zkUtil;
private ZKit zkUtil;
private AppConfiguration appConfiguration ;
... ... @@ -27,7 +27,7 @@ public class RegistryZK implements Runnable {
public RegistryZK(String ip, int port) {
this.ip = ip;
this.port = port;
zkUtil = SpringBeanFactory.getBean(ZKUtil.class) ;
zkUtil = SpringBeanFactory.getBean(ZKit.class) ;
appConfiguration = SpringBeanFactory.getBean(AppConfiguration.class) ;
}
... ...
... ... @@ -19,9 +19,9 @@ import java.util.List;
* @since JDK 1.8
*/
@Component
public class ZKUtil {
public class ZKit {
private static Logger logger = LoggerFactory.getLogger(ZKUtil.class);
private static Logger logger = LoggerFactory.getLogger(ZKit.class);
@Autowired
... ...
spring.application.name=netty-action-zk
spring.application.name=cim-zk
# web port
server.port=8083
... ...