diff --git a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/mapper/config/RegisterMapper.java b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/mapper/config/RegisterMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..a9a478f90ab8d672dbb22c7bbf928a1ae337b1d4 --- /dev/null +++ b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/mapper/config/RegisterMapper.java @@ -0,0 +1,15 @@ +package cn.icanci.rec.admin.biz.mapper.config; + +import cn.icanci.rec.admin.dal.mongodb.dateobject.RegisterDO; +import cn.icanci.rec.common.model.config.RegisterVO; + +import org.mapstruct.Mapper; +import org.mapstruct.NullValueMappingStrategy; + +/** + * @author icanci + * @since 1.0 Created in 2022/11/22 22:06 + */ +@Mapper(componentModel = "spring", nullValueMappingStrategy = NullValueMappingStrategy.RETURN_NULL) +public interface RegisterMapper extends BaseMapper { +} diff --git a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/RegisterService.java b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/RegisterService.java new file mode 100644 index 0000000000000000000000000000000000000000..591835b5cc2b316bb7fb6abecbab4ce5b1a2bc4e --- /dev/null +++ b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/RegisterService.java @@ -0,0 +1,26 @@ +package cn.icanci.rec.admin.biz.service; + +import cn.icanci.rec.admin.dal.mongodb.common.PageList; +import cn.icanci.rec.common.model.config.RegisterVO; + +import java.util.List; + +/** + * @author icanci + * @since 1.0 Created in 2022/11/22 21:23 + */ +public interface RegisterService extends BaseService { + @Override + List queryAll(); + + @Override + void save(RegisterVO register); + + @Override + RegisterVO queryById(String id); + + @Override + PageList queryPage(RegisterVO registerVO, int pageNum, int pageSize); + + void deleteById(String id); +} diff --git a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/impl/RegisterServiceImpl.java b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/impl/RegisterServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..6c6a15f68ce80abf4e24bfa46d3990ef66dc3d11 --- /dev/null +++ b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/impl/RegisterServiceImpl.java @@ -0,0 +1,64 @@ +package cn.icanci.rec.admin.biz.service.impl; + +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.beans.factory.InitializingBean; +import org.springframework.stereotype.Service; + +import cn.icanci.rec.admin.biz.mapper.config.RegisterMapper; +import cn.icanci.rec.admin.biz.service.RegisterService; +import cn.icanci.rec.admin.biz.thread.TriggerThread; +import cn.icanci.rec.admin.dal.mongodb.common.PageList; +import cn.icanci.rec.admin.dal.mongodb.daointerface.RegisterDAO; +import cn.icanci.rec.admin.dal.mongodb.dateobject.RegisterDO; +import cn.icanci.rec.common.model.config.RegisterVO; + +/** + * @author icanci + * @since 1.0 Created in 2022/11/22 21:38 + */ +@Service +public class RegisterServiceImpl implements RegisterService, InitializingBean { + @Resource + private RegisterDAO registerDAO; + @Resource + private RegisterMapper registerMapper; + + @Override + public List queryAll() { + return registerMapper.dos2vos(registerDAO.queryAll()); + } + + @Override + public void save(RegisterVO register) { + if (doInsert(register)) { + RegisterDO insert = registerMapper.vo2do(register); + registerDAO.insert(insert); + } else { + registerDAO.update(registerMapper.vo2do(register)); + } + } + + @Override + public RegisterVO queryById(String id) { + return registerMapper.do2vo(registerDAO.queryOneById(id)); + } + + @Override + public PageList queryPage(RegisterVO register, int pageNum, int pageSize) { + PageList pageQuery = registerDAO.pageQuery(registerMapper.vo2do(register), pageNum, pageSize); + return new PageList<>(registerMapper.dos2vos(pageQuery.getData()), pageQuery.getPaginator()); + } + + @Override + public void deleteById(String id) { + registerDAO.deleteById(id); + } + + @Override + public void afterPropertiesSet() throws Exception { + TriggerThread.setRegisterService(this); + } +} diff --git a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/thread/TriggerThread.java b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/thread/TriggerThread.java new file mode 100644 index 0000000000000000000000000000000000000000..a0c7c55b28f888f1afbb0239ea14877c5e73753b --- /dev/null +++ b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/thread/TriggerThread.java @@ -0,0 +1,21 @@ +package cn.icanci.rec.admin.biz.thread; + +import cn.icanci.rec.admin.biz.service.RegisterService; + +/** + * 触发器线程,定时向所有客户端发送心跳,维护连接 + * + * @author icanci + * @since 1.0 Created in 2022/11/22 22:11 + */ +public class TriggerThread { + private static RegisterService registerService; + + public static void setRegisterService(RegisterService registerService) { + TriggerThread.registerService = registerService; + } + + public static void start() { + + } +} diff --git a/rec-admin/rec-admin-dal/src/main/java/cn/icanci/rec/admin/dal/mongodb/daointerface/RegisterDAO.java b/rec-admin/rec-admin-dal/src/main/java/cn/icanci/rec/admin/dal/mongodb/daointerface/RegisterDAO.java index fb8fd07e1700aaba490c7df4751b6013dc809fe8..47a648903786d62021eefa63b51236f3da247e01 100644 --- a/rec-admin/rec-admin-dal/src/main/java/cn/icanci/rec/admin/dal/mongodb/daointerface/RegisterDAO.java +++ b/rec-admin/rec-admin-dal/src/main/java/cn/icanci/rec/admin/dal/mongodb/daointerface/RegisterDAO.java @@ -3,7 +3,7 @@ package cn.icanci.rec.admin.dal.mongodb.daointerface; import cn.icanci.rec.admin.dal.mongodb.dateobject.RegisterDO; /** - * TODO 注册中心 + * 注册中心 * * @author icanci * @since 1.0 Created in 2022/11/17 19:02 @@ -18,10 +18,13 @@ public interface RegisterDAO extends BaseDAO { */ Class COLLECTION_CLASS = RegisterDO.class; - interface SceneColumn extends BaseColumn { - /** - * 域Code - */ - String domainCode = "domainCode"; + void deleteById(String id); + + interface RegisterColumn extends BaseColumn { + String clientAddress = "clientAddress"; + String clientPort = "clientPort"; + String appName = "appName"; + String registerTime = "registerTime"; + String lastUpdateTime = "lastUpdateTime"; } } diff --git a/rec-admin/rec-admin-dal/src/main/java/cn/icanci/rec/admin/dal/mongodb/dateobject/RegisterDO.java b/rec-admin/rec-admin-dal/src/main/java/cn/icanci/rec/admin/dal/mongodb/dateobject/RegisterDO.java index 7c59af34554aca1d865114096da93e7c243b7961..b80c37b91a1fbdb8e1d060b38577847b03edf1d2 100644 --- a/rec-admin/rec-admin-dal/src/main/java/cn/icanci/rec/admin/dal/mongodb/dateobject/RegisterDO.java +++ b/rec-admin/rec-admin-dal/src/main/java/cn/icanci/rec/admin/dal/mongodb/dateobject/RegisterDO.java @@ -1,12 +1,70 @@ package cn.icanci.rec.admin.dal.mongodb.dateobject; +import java.util.Date; + /** * @author icanci * @since 1.0 Created in 2022/11/17 19:03 */ public class RegisterDO extends BaseDO { /** - * 注册到哪个域上 + * SDK 服务ip地址 + */ + private String clientAddress; + /** + * SDK 服务端口地址 + */ + private int clientPort; + /** + * SDK 服务服务名字 */ - private String domainCode; + private String appName; + /** + * 服务注册事件 + */ + private Date registerTime; + /** + * 上次注册更新时间 + */ + private Date lastUpdateTime; + + public String getClientAddress() { + return clientAddress; + } + + public void setClientAddress(String clientAddress) { + this.clientAddress = clientAddress; + } + + public int getClientPort() { + return clientPort; + } + + public void setClientPort(int clientPort) { + this.clientPort = clientPort; + } + + public String getAppName() { + return appName; + } + + public void setAppName(String appName) { + this.appName = appName; + } + + public Date getRegisterTime() { + return registerTime; + } + + public void setRegisterTime(Date registerTime) { + this.registerTime = registerTime; + } + + public Date getLastUpdateTime() { + return lastUpdateTime; + } + + public void setLastUpdateTime(Date lastUpdateTime) { + this.lastUpdateTime = lastUpdateTime; + } } diff --git a/rec-admin/rec-admin-dal/src/main/java/cn/icanci/rec/admin/dal/mongodb/mongo/MongoMetadataDAO.java b/rec-admin/rec-admin-dal/src/main/java/cn/icanci/rec/admin/dal/mongodb/mongo/MongoMetadataDAO.java index 2ce036058e9d0f1ec94858a825d41a8e87cd0678..fb07a33d9885c878b0d8ea39a65fa34b9819b729 100644 --- a/rec-admin/rec-admin-dal/src/main/java/cn/icanci/rec/admin/dal/mongodb/mongo/MongoMetadataDAO.java +++ b/rec-admin/rec-admin-dal/src/main/java/cn/icanci/rec/admin/dal/mongodb/mongo/MongoMetadataDAO.java @@ -35,7 +35,6 @@ public class MongoMetadataDAO extends AbstractBaseDAO implements Met Criteria criteria = Criteria.where(MetadataColumn.env).is(DEFAULT_ENV); Query query = new Query(criteria); return mongoTemplate.find(query, COLLECTION_CLASS, COLLECTION_NAME); - } @Override diff --git a/rec-admin/rec-admin-dal/src/main/java/cn/icanci/rec/admin/dal/mongodb/mongo/MongoRegisterDAO.java b/rec-admin/rec-admin-dal/src/main/java/cn/icanci/rec/admin/dal/mongodb/mongo/MongoRegisterDAO.java new file mode 100644 index 0000000000000000000000000000000000000000..9338219cf15db4c53917b163e524c11cefd9cef9 --- /dev/null +++ b/rec-admin/rec-admin-dal/src/main/java/cn/icanci/rec/admin/dal/mongodb/mongo/MongoRegisterDAO.java @@ -0,0 +1,68 @@ +package cn.icanci.rec.admin.dal.mongodb.mongo; + +import cn.icanci.rec.admin.dal.mongodb.common.PageList; +import cn.icanci.rec.admin.dal.mongodb.daointerface.RegisterDAO; +import cn.icanci.rec.admin.dal.mongodb.dateobject.RegisterDO; + +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.data.domain.Sort; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.stereotype.Service; + +/** + * @author icanci + * @since 1.0 Created in 2022/11/22 22:00 + */ +@Service("registerDAO") +public class MongoRegisterDAO extends AbstractBaseDAO implements RegisterDAO { + + @Override + public void insert(RegisterDO registerDO) { + super.insert(registerDO); + mongoTemplate.insert(registerDO, COLLECTION_NAME); + } + + @Override + public void update(RegisterDO registerDO) { + super.update(registerDO); + mongoTemplate.save(registerDO, COLLECTION_NAME); + } + + @Override + public List queryAll() { + Criteria criteria = Criteria.where(RegisterColumn.env).is(DEFAULT_ENV); + Query query = new Query(criteria); + return mongoTemplate.find(query, COLLECTION_CLASS, COLLECTION_NAME); + } + + @Override + public PageList pageQuery(RegisterDO registerDO, int pageNum, int pageSize) { + Criteria criteria = Criteria.where(RegisterColumn.env).is(DEFAULT_ENV); + if (StringUtils.isNotBlank(registerDO.getAppName())) { + // 不分区大小写查询,其中操作符"i":表示不分区大小写 + criteria.and(RegisterColumn.appName).regex("^.*" + registerDO.getAppName() + ".*$", "i"); + } + Query query = new Query(criteria); + query.with(Sort.by(Sort.Direction.DESC, RegisterColumn.createTime)); + return pageQuery(query, COLLECTION_CLASS, pageSize, pageNum, COLLECTION_NAME); + } + + @Override + public RegisterDO queryOneById(String _id) { + Criteria criteria = Criteria.where(RegisterColumn._id).is(_id); + criteria.and(RegisterColumn.env).is(DEFAULT_ENV); + Query query = new Query(criteria); + return mongoTemplate.findOne(query, COLLECTION_CLASS, COLLECTION_NAME); + } + + @Override + public void deleteById(String id) { + Criteria criteria = Criteria.where(RegisterColumn._id).is(id); + criteria.and(RegisterColumn.env).is(DEFAULT_ENV); + Query query = new Query(criteria); + mongoTemplate.remove(query, COLLECTION_CLASS, COLLECTION_NAME); + } +} diff --git a/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/controller/trigger/TriggerController.java b/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/controller/trigger/RegisterController.java similarity index 71% rename from rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/controller/trigger/TriggerController.java rename to rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/controller/trigger/RegisterController.java index 9078f841273f37151843f08a1090aa7561d7d196..9512b1c978d90dd65b82697d2860fc1bf2373d22 100644 --- a/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/controller/trigger/TriggerController.java +++ b/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/controller/trigger/RegisterController.java @@ -1,9 +1,12 @@ package cn.icanci.rec.admin.web.controller.trigger; +import cn.icanci.rec.admin.biz.service.RegisterService; import cn.icanci.rec.admin.web.form.PublishForm; import cn.icanci.rec.common.model.socket.RegisterDTO; import cn.icanci.rec.common.result.R; +import javax.annotation.Resource; + import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -16,16 +19,19 @@ import org.springframework.web.bind.annotation.RestController; * @since 1.0 Created in 2022/11/20 19:53 */ @RestController -@RequestMapping("/rec/trigger") -public class TriggerController { +@RequestMapping("/rec/register") +public class RegisterController { + + @Resource + private RegisterService registerService; @PostMapping("publish") public R debug(@RequestBody PublishForm publish) { return R.builderOk().build(); } - @PostMapping("register") - public R register(@RequestBody RegisterDTO register) { + @PostMapping("doRegister") + public R doRegister(@RequestBody RegisterDTO register) { return R.builderOk().data("register", register).build(); } } diff --git a/rec-common/src/main/java/cn/icanci/rec/common/model/config/RegisterVO.java b/rec-common/src/main/java/cn/icanci/rec/common/model/config/RegisterVO.java new file mode 100644 index 0000000000000000000000000000000000000000..4082addc5582809f6fa7d20b42b62de3b08c1d50 --- /dev/null +++ b/rec-common/src/main/java/cn/icanci/rec/common/model/config/RegisterVO.java @@ -0,0 +1,70 @@ +package cn.icanci.rec.common.model.config; + +import java.util.Date; + +/** + * @author icanci + * @since 1.0 Created in 2022/11/22 21:35 + */ +public class RegisterVO extends BaseVO { + /** + * SDK 服务ip地址 + */ + private String clientAddress; + /** + * SDK 服务端口地址 + */ + private int clientPort; + /** + * SDK 服务服务名字 + */ + private String appName; + /** + * 服务注册事件 + */ + private Date registerTime; + /** + * 上次注册更新时间 + */ + private Date lastUpdateTime; + + public String getClientAddress() { + return clientAddress; + } + + public void setClientAddress(String clientAddress) { + this.clientAddress = clientAddress; + } + + public int getClientPort() { + return clientPort; + } + + public void setClientPort(int clientPort) { + this.clientPort = clientPort; + } + + public String getAppName() { + return appName; + } + + public void setAppName(String appName) { + this.appName = appName; + } + + public Date getRegisterTime() { + return registerTime; + } + + public void setRegisterTime(Date registerTime) { + this.registerTime = registerTime; + } + + public Date getLastUpdateTime() { + return lastUpdateTime; + } + + public void setLastUpdateTime(Date lastUpdateTime) { + this.lastUpdateTime = lastUpdateTime; + } +} diff --git a/rec-common/src/main/java/cn/icanci/rec/common/model/socket/UriConstant.java b/rec-common/src/main/java/cn/icanci/rec/common/model/socket/UriConstant.java index efbb75ac5aa690fa08852cf280ea16f7d5ab4065..50de68d689b7a791db38de40e453943cce49d3f1 100644 --- a/rec-common/src/main/java/cn/icanci/rec/common/model/socket/UriConstant.java +++ b/rec-common/src/main/java/cn/icanci/rec/common/model/socket/UriConstant.java @@ -7,9 +7,9 @@ package cn.icanci.rec.common.model.socket; public interface UriConstant { /** 心跳 */ - String heartbeat = "/rec/trigger/heartbeat"; + String heartbeat = "/rec/register/heartbeat"; /** 刷新 */ - String refresh = "/rec/trigger/refresh"; + String refresh = "/rec/register/refresh"; /** 注册 */ - String register = "/rec/trigger/register"; + String register = "/rec/register/doRegister"; } diff --git a/rec-core/src/main/resources/application.yml b/rec-core/src/main/resources/application.yml index bae25d0497319f35b51fd4d4a46c130a475c7355..8ecfb4e7fc774c4986aed8e0dbd6deab7023705d 100644 --- a/rec-core/src/main/resources/application.yml +++ b/rec-core/src/main/resources/application.yml @@ -12,8 +12,13 @@ logging: # 接入方需要上报自己的信息给注册中心 rec: env: test - project-union-key: - project-union-name: + domain: empty + load-all: true + client-port: 11000 + server-ips: 127.0.0.1 + server-port: 9999 + app-name: xxx + spring: # datasource: diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/properties/RecProperties.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/properties/RecProperties.java index d3bf921f556f7f26e0259c0a184a739adb608a6f..9c018b33973db59846e44642df5cc03c5c99c027 100644 --- a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/properties/RecProperties.java +++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/properties/RecProperties.java @@ -14,33 +14,36 @@ public class RecProperties { /** * AppName信息 */ - private String appName; + private String appName; /** * 需要加载的域Code * 以英文,分隔 */ - private String domain; + private String domain; /** - * 是否加载所有域 - * 为true则加载所有域 + * 是否加载所有域,为true则加载所有域,为false则加载domain */ - private boolean loadAll; + private boolean loadAll; /** * 加载的环境 */ - private String env; + private String env; /** - * 客户端信息 + * 客户端注册的port */ - private RecClient client; + private int clientPort; /** - * 服务端信息 + * 服务端ip,以,分隔 */ - private RecServer server; + private String serverIps; + /** + * 服务端port + */ + private int serverPort; public String getAppName() { return appName; @@ -74,19 +77,27 @@ public class RecProperties { this.env = env; } - public RecClient getClient() { - return client; + public int getClientPort() { + return clientPort; + } + + public void setClientPort(int clientPort) { + this.clientPort = clientPort; + } + + public String getServerIps() { + return serverIps; } - public void setClient(RecClient client) { - this.client = client; + public void setServerIps(String serverIps) { + this.serverIps = serverIps; } - public RecServer getServer() { - return server; + public int getServerPort() { + return serverPort; } - public void setServer(RecServer server) { - this.server = server; + public void setServerPort(int serverPort) { + this.serverPort = serverPort; } } diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/server/RecNettyClient.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/server/RecNettyClient.java index bc742d91083836abd1263c30ce78be289c55e6cb..b5eaf0cfe633d0878c70c7962ab1aa528267e97d 100644 --- a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/server/RecNettyClient.java +++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/server/RecNettyClient.java @@ -36,10 +36,10 @@ public class RecNettyClient { throw new RuntimeException("RECServerThreadPool is EXHAUSTED!"); }); - private static RegisterService registerService; + private static RegisterClient registerClient; - public static void setRegisterService(RegisterService registerService) { - RecNettyClient.registerService = registerService; + public static void setRegisterService(RegisterClient registerClient) { + RecNettyClient.registerClient = registerClient; } /** @@ -106,7 +106,7 @@ public class RecNettyClient { * @param appName 客户端服务名 */ private static void doRegistry(String serverAddress, int serverPort, int clientPort, String appName) { - registerService.register(serverAddress, serverPort, clientPort, appName); + registerClient.register(serverAddress, serverPort, clientPort, appName); } } diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/server/RegisterService.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/server/RegisterClient.java similarity index 86% rename from rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/server/RegisterService.java rename to rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/server/RegisterClient.java index fcbad261c52f2ac116052d0b5ca1d3615a883181..f8696c877bae5a4fbee4126cf2a3e495c6b8d687 100644 --- a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/server/RegisterService.java +++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/server/RegisterClient.java @@ -10,9 +10,7 @@ import cn.icanci.rec.engine.script.client.RemoteException; import cn.icanci.rec.engine.script.client.http.HttpMethod; import cn.icanci.rec.engine.script.client.http.OkHttpClientImpl; import cn.icanci.rec.engine.script.client.serializer.SerializerEnum; -import cn.icanci.rec.engine.sdk.properties.RecClient; import cn.icanci.rec.engine.sdk.properties.RecProperties; -import cn.icanci.rec.engine.sdk.properties.RecServer; import java.util.concurrent.TimeUnit; @@ -30,8 +28,8 @@ import com.google.common.collect.Maps; * @since 1.0 Created in 2022/11/20 21:29 */ @Service -public class RegisterService implements InitializingBean { - private static final Logger logger = LoggerFactory.getLogger(RegisterService.class); +public class RegisterClient implements InitializingBean { + private static final Logger logger = LoggerFactory.getLogger(RegisterClient.class); /** http实例 */ private static final Client CLIENT = OkHttpClientImpl.getInstance(); @Resource @@ -75,8 +73,6 @@ public class RegisterService implements InitializingBean { RecNettyClient.setRegisterService(this); // 启动服务器 - RecServer server = recProperties.getServer(); - RecClient client = recProperties.getClient(); - RecNettyClient.startClient(server.getIp(), server.getPort(), client.getPort(), recProperties.getAppName()); + RecNettyClient.startClient(recProperties.getServerIps(), recProperties.getServerPort(), recProperties.getClientPort(), recProperties.getAppName()); } }