Browse Source

im-entry registry

master
tangmingyou 4 years ago
parent
commit
1432ff5db7
  1. 4
      im-client/pom.xml
  2. 6
      im-client/src/main/java/net/sopod/soim/client/ClientMain.java
  3. 5
      im-client/src/main/java/net/sopod/soim/client/cmd/CmdDispatcher.java
  4. 4
      im-client/src/main/java/net/sopod/soim/client/cmd/CmdEnum.java
  5. 31
      im-client/src/main/java/net/sopod/soim/client/cmd/CmdStarter.java
  6. 9
      im-client/src/main/java/net/sopod/soim/client/config/GuiceIoc.java
  7. 20
      im-client/src/main/java/net/sopod/soim/client/handler/ExitHandler.java
  8. 30
      im-client/src/main/java/net/sopod/soim/client/handler/cmd/ExitHandler.java
  9. 7
      im-client/src/main/java/net/sopod/soim/client/handler/cmd/LoginHandler.java
  10. 26
      im-client/src/main/java/net/sopod/soim/client/handler/msg/ResTokenAuthHandler.java
  11. 10
      im-client/src/main/java/net/sopod/soim/client/logger/Logger.java
  12. 53
      im-client/src/main/java/net/sopod/soim/client/session/MessageDispatcher.java
  13. 13
      im-client/src/main/java/net/sopod/soim/client/session/MessageHandler.java
  14. 60
      im-client/src/main/java/net/sopod/soim/client/session/SoImSession.java
  15. 21
      im-common/src/main/java/net/sopod/soim/common/constant/AppConstant.java
  16. 40
      im-common/src/main/java/net/sopod/soim/common/util/Collects.java
  17. 26
      im-common/src/main/java/net/sopod/soim/common/util/Reflects.java
  18. 4
      im-common/src/main/java/net/sopod/soim/common/util/StringUtil.java
  19. 2
      im-core/src/main/java/net/sopod/soim/core/handler/NetUserMessageHandler.java
  20. 2
      im-core/src/main/java/net/sopod/soim/core/registry/ProtoMessageHandlerRegistry.java
  21. 11
      im-entry/src/main/java/net/sopod/soim/entry/EntryApplication.java
  22. 5
      im-entry/src/main/java/net/sopod/soim/entry/config/EntryServerConfig.java
  23. 7
      im-entry/src/main/java/net/sopod/soim/entry/handler/auth/ReqTokenAuthHandler.java
  24. 48
      im-entry/src/main/java/net/sopod/soim/entry/registry/RegistryService.java
  25. 5
      im-entry/src/main/resources/application.yml
  26. 4
      im-service/im-logic-user/src/main/resources/application.yml
  27. 5
      im-service/im-router/pom.xml
  28. 7
      pom.xml

4
im-client/pom.xml

@ -29,6 +29,10 @@
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
</dependency>
<dependency>
<groupId>com.google.inject.extensions</groupId>
<artifactId>guice-multibindings</artifactId>
</dependency>
<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>

6
im-client/src/main/java/net/sopod/soim/client/ClientMain.java

@ -18,16 +18,12 @@ import net.sopod.soim.client.config.GuiceIoc;
public class ClientMain {
public static void main(String[] args) {
// ImNetClient client = new ImNetClient();
// client.connect("127.0.0.1", 8088);
// 创建 ioc 容器
GuiceIoc guiceIoc = new GuiceIoc(ClientMain.class);
Injector injector = Guice.createInjector(Stage.PRODUCTION, guiceIoc);
// 启动 cmd scanner
CmdStarter cmdStarter = injector.getInstance(CmdStarter.class);
cmdStarter.start();
injector.getInstance(CmdStarter.class).start();
}
}

5
im-client/src/main/java/net/sopod/soim/client/cmd/CmdDispatcher.java

@ -7,6 +7,7 @@ import com.google.inject.Injector;
import com.google.inject.Singleton;
import net.sopod.soim.client.cmd.handler.CmdHandler;
import net.sopod.soim.client.logger.Logger;
import net.sopod.soim.common.util.StringUtil;
/**
* CommandDispatcher
@ -39,7 +40,9 @@ public class CmdDispatcher {
if (args.length > 0) {
System.arraycopy(cmdArgs, 1, args, 0, args.length);
}
if (StringUtil.isEmpty(cmd)) {
return;
}
CmdEnum cmdEnum = CmdEnum.getValue(cmd);
if (cmdEnum == null) {
Logger.error("未知指令: {}", cmd);

4
im-client/src/main/java/net/sopod/soim/client/cmd/CmdEnum.java

@ -1,8 +1,8 @@
package net.sopod.soim.client.cmd;
import net.sopod.soim.client.cmd.handler.CmdHandler;
import net.sopod.soim.client.handler.ExitHandler;
import net.sopod.soim.client.handler.LoginHandler;
import net.sopod.soim.client.handler.cmd.ExitHandler;
import net.sopod.soim.client.handler.cmd.LoginHandler;
/**
* Commands

31
im-client/src/main/java/net/sopod/soim/client/cmd/CmdStarter.java

@ -1,14 +1,14 @@
package net.sopod.soim.client.cmd;
import com.google.inject.Inject;
import com.google.inject.Injector;
import com.google.inject.Singleton;
import net.sopod.soim.client.logger.Logger;
import java.util.Scanner;
/**
* Args
* CmdStarter
* 命令启动器
*
* @author tmy
* @date 2022-04-25 10:28
@ -18,25 +18,38 @@ public class CmdStarter {
private final CmdDispatcher cmdDispatcher;
private Scanner scanner;
@Inject
public CmdStarter(CmdDispatcher cmdDispatcher) {
this.cmdDispatcher = cmdDispatcher;
}
public void start() {
Scanner scanner = new Scanner(System.in);
this.close();
this.scanner = new Scanner(System.in);
Logger.pre("【client】: ");
while(scanner.hasNextLine()) {
String cmd = scanner.nextLine();
cmdDispatcher.dispatchCmd(cmd);
while(this.scanner.hasNextLine()) {
String cmd = this.scanner.nextLine();
this.cmdDispatcher.dispatchCmd(cmd);
// 退出
if (CmdEnum.exit.name().equals(cmd.split("[ \t]+")[0])) {
Logger.info("bye bye");
break;
}
Logger.pre("【client】: ");
}
scanner.close();
}
public void exit() {
public void close() {
if (this.scanner != null) {
this.scanner.close();
}
}
public static void printPre() {
Logger.pre("【client】: ");
}
}

9
im-client/src/main/java/net/sopod/soim/client/config/GuiceIoc.java

@ -2,6 +2,8 @@ package net.sopod.soim.client.config;
import com.google.inject.AbstractModule;
import com.google.inject.Singleton;
import com.google.inject.multibindings.Multibinder;
import net.sopod.soim.client.session.MessageHandler;
import org.reflections.Reflections;
import java.util.Collections;
@ -31,8 +33,15 @@ public class GuiceIoc extends AbstractModule {
* guice 注册 bean
*/
@Override
@SuppressWarnings("unchecked")
protected void configure() {
for (Class<?> beanType : this.beanTypes) {
if (MessageHandler.class.isAssignableFrom(beanType)) {
Multibinder.newSetBinder(binder(), MessageHandler.class)
.addBinding()
.to((Class<? extends MessageHandler>) beanType);
continue;
}
bind(beanType);
}
// 注册后释放内存

20
im-client/src/main/java/net/sopod/soim/client/handler/ExitHandler.java

@ -1,20 +0,0 @@
package net.sopod.soim.client.handler;
import com.google.inject.Singleton;
import net.sopod.soim.client.cmd.handler.NonArgsHandler;
/**
* ExitHandler
*
* @author tmy
* @date 2022-04-25 11:53
*/
@Singleton
public class ExitHandler extends NonArgsHandler {
@Override
public void handle() {
System.exit(1);
}
}

30
im-client/src/main/java/net/sopod/soim/client/handler/cmd/ExitHandler.java

@ -0,0 +1,30 @@
package net.sopod.soim.client.handler.cmd;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import net.sopod.soim.client.cmd.CmdStarter;
import net.sopod.soim.client.cmd.handler.NonArgsHandler;
import net.sopod.soim.client.session.SoImSession;
/**
* ExitHandler
*
* @author tmy
* @date 2022-04-25 11:53
*/
@Singleton
public class ExitHandler extends NonArgsHandler {
@Inject
private SoImSession soImSession;
@Inject
private CmdStarter cmdStarter;
@Override
public void handle() {
cmdStarter.close();
soImSession.close();
}
}

7
im-client/src/main/java/net/sopod/soim/client/handler/LoginHandler.java → im-client/src/main/java/net/sopod/soim/client/handler/cmd/LoginHandler.java

@ -1,4 +1,4 @@
package net.sopod.soim.client.handler;
package net.sopod.soim.client.handler.cmd;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@ -35,17 +35,16 @@ public class LoginHandler implements CmdHandler<ArgsLogin> {
@Override
public void handleArgs(ArgsLogin args) {
Logger.info("login args: {}", args);
HashMap<String, String> params = new HashMap<>();
params.put("account", args.getAccount());
params.put("password", args.getPassword());
Logger.info("登录中...");
LoginResDTO loginRes = HttpClient.restPost(clientConfig.getLoginUrl(), params, LoginResDTO.class);
if (!Boolean.TRUE.equals(loginRes.getSuccess())) {
Logger.error("登录失败: {}", loginRes.getMessage());
return;
}
String authToken = loginRes.getAuthToken();
Logger.info("登录成功: {}", authToken);
Logger.info("登录成功: {}", loginRes.getUid());
Auth.ReqTokenAuth reqTokenAuth = Auth.ReqTokenAuth.newBuilder()
.setUid(loginRes.getUid())

26
im-client/src/main/java/net/sopod/soim/client/handler/msg/ResTokenAuthHandler.java

@ -0,0 +1,26 @@
package net.sopod.soim.client.handler.msg;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import net.sopod.soim.client.session.MessageHandler;
import net.sopod.soim.client.session.SoImSession;
import net.sopod.soim.data.msg.auth.Auth;
/**
* ResTokenAuthHandler
*
* @author tmy
* @date 2022-04-27 9:46
*/
@Singleton
public class ResTokenAuthHandler implements MessageHandler<Auth.ResTokenAuth> {
@Inject
private SoImSession soImSession;
@Override
public void handleMsg(Auth.ResTokenAuth msg) {
soImSession.authResult(msg.getSuccess(), msg.getMessage());
}
}

10
im-client/src/main/java/net/sopod/soim/client/logger/Logger.java

@ -1,5 +1,7 @@
package net.sopod.soim.client.logger;
import net.sopod.soim.client.cmd.CmdStarter;
/**
* Logger
*
@ -21,7 +23,13 @@ public class Logger {
for (int i = 0; i < args.length; i++) {
args[i] = String.valueOf(args[i]);
}
System.out.println(String.format(msg, args));
if ("main".equals(Thread.currentThread().getName())) {
System.out.println(String.format(msg, args));
} else {
// 其他线程异步打印
System.out.println(System.lineSeparator() + String.format(msg, args));
CmdStarter.printPre();
}
}
public static void pre(String pre) {

53
im-client/src/main/java/net/sopod/soim/client/session/MessageDispatcher.java

@ -0,0 +1,53 @@
package net.sopod.soim.client.session;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.google.protobuf.MessageLite;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import net.sopod.soim.common.util.Reflects;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* MessageDispatcher
*
* @author tmy
* @date 2022-04-27 9:48
*/
@Singleton
@ChannelHandler.Sharable
public class MessageDispatcher extends SimpleChannelInboundHandler<MessageLite> {
private Map<Class<?>, MessageHandler> msgHandlers;
@Inject
public MessageDispatcher(Set<MessageHandler> handlers) {
this.registryHandlers(handlers);
}
@Override
protected void channelRead0(ChannelHandlerContext channelHandlerContext, MessageLite msg) throws Exception {
MessageHandler messageHandler = msgHandlers.get(msg.getClass());
messageHandler.handleMsg(msg);
}
private void registryHandlers(Set<MessageHandler> handlers) {
for (MessageHandler<?> handler : handlers) {
List<String> msgTypes = Reflects.getSuperInterfaceGenericTypes(handler.getClass());
Map<Class<?>, MessageHandler> msgHandlers = new HashMap<>();
try {
Class<?> msgType = msgTypes.size() == 0 ? Object.class : Class.forName(msgTypes.get(0));
msgHandlers.put(msgType, handler);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
this.msgHandlers = msgHandlers;
}
}
}

13
im-client/src/main/java/net/sopod/soim/client/session/MessageHandler.java

@ -0,0 +1,13 @@
package net.sopod.soim.client.session;
/**
* MessageHandler
*
* @author tmy
* @date 2022-04-27 9:50
*/
public interface MessageHandler<T> {
void handleMsg(T msg);
}

60
im-client/src/main/java/net/sopod/soim/client/session/SoImSession.java

@ -1,5 +1,6 @@
package net.sopod.soim.client.session;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.google.protobuf.MessageLite;
import io.netty.bootstrap.Bootstrap;
@ -32,6 +33,13 @@ public class SoImSession {
private AtomicBoolean auth = new AtomicBoolean(false);
private final MessageDispatcher messageDispatcher;
@Inject
public SoImSession(MessageDispatcher messageDispatcher) {
this.messageDispatcher = messageDispatcher;
}
public void connect(String host, Integer port, Auth.ReqTokenAuth tokenAuth) {
eventLoopGroup = new NioEventLoopGroup(2);
Bootstrap b = new Bootstrap()
@ -41,43 +49,73 @@ public class SoImSession {
@Override
protected void initChannel(SocketChannel ch) throws Exception {
ch.pipeline()
.addLast(new ImMessageCodec());
// .addLast(new ProtoMessageCodec());
.addLast(new ImMessageCodec())
.addLast(messageDispatcher);
}
});
try {
Logger.info("连接中...");
clientChannel = b.connect(host, port).await().channel();
// 连接后立即发送认证消息
// TODO ResHandler
clientChannel.writeAndFlush(tokenAuth);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (Exception e) {
Logger.error("连接服务器失败: {}", e.getMessage());
}
}
/**
* 处理登录认证结果
*/
public void authResult(boolean success, String message) {
this.auth.set(success);
if (this.auth.get()) {
Logger.info("连接服务器成功");
return;
}
Logger.info("连接服务器失败: {}", message);
this.close();
}
public void authSuccess() {
// token 认证成功,连接建立
this.auth.set(true);
Logger.info("连接服务器成功");
}
/**
* 发送消息
*/
public void send(MessageLite message) {
if (!auth.get()) {
Logger.error("请登录后发送消息");
Logger.error("请登录");
return;
}
if (clientChannel == null
|| !clientChannel.isActive()) {
Logger.error("连接未打开");
Logger.error("连接已关闭");
return;
}
clientChannel.write(message);
}
/**
* 关闭 tcp 连接
*/
public void close() {
if (clientChannel != null) {
try {
clientChannel.close().await();
} catch (InterruptedException e) {
logger.error("channel close error: ", e);
if (this.clientChannel.isActive()) {
try {
clientChannel.close().await();
Logger.info("连接已关闭");
} catch (InterruptedException e) {
Logger.error("连接关闭失败: {}", e.getMessage());
}
}
this.clientChannel = null;
}
if (eventLoopGroup != null) {
eventLoopGroup.shutdownGracefully();
this.eventLoopGroup = null;
}
}

21
im-common/src/main/java/net/sopod/soim/common/constant/AppConstant.java

@ -0,0 +1,21 @@
package net.sopod.soim.common.constant;
/**
* AppConstant
*
* @author tmy
* @date 2022-04-27 15:04
*/
public interface AppConstant {
String APP_REGISTRY_GROUP = "so-im";
/** im-entry 注册中心名称 */
String APP_IM_ENTRY_REGISTRY_NAME = "im-entry-instance";
String APP_IM_ENTRY_NAME = "im-entry";
String APP_IM_HTTP_ENTRY_NAME = "im-http-entry";
String APP_IM_DAS_USER_NAME = "im-das-user";
}

40
im-common/src/main/java/net/sopod/soim/common/util/Collects.java

@ -1,5 +1,8 @@
package net.sopod.soim.common.util;
import java.util.*;
import java.util.function.Function;
/**
* Collects
*
@ -20,4 +23,41 @@ public class Collects {
return arr;
}
public static <T,K,V> Map<K, List<V>> group(Collection<T> collect,
Function<T, K> groupBy,
Function<T, V> valBy) {
return group(3, collect, groupBy, valBy);
}
/**
* list 数据进行分组
* @param aboutFactorOfSize 集合数据条数约是分组后数据的n倍
* @param collect 集合数据
* @param groupBy 集合元素分组值
* @param valBy 分组结果
* @param <T> 集合元素类型
* @param <K> 分组值类型
* @param <V> 分组结果类型
* @return 分组结果
*/
public static <T,K,V> Map<K, List<V>> group(int aboutFactorOfSize,
Collection<T> collect,
Function<T, K> groupBy,
Function<T, V> valBy) {
if (aboutFactorOfSize < 1) {
throw new IllegalArgumentException("aboutFactorOfSize需大于0");
}
if (collect == null || collect.isEmpty()) {
return Collections.emptyMap();
}
Map<K, List<V>> result = new HashMap<>(Math.max(6, Math.min(16, collect.size() / aboutFactorOfSize)));
for (T item : collect) {
K key = groupBy.apply(item);
V val = valBy.apply(item);
List<V> vals = result.computeIfAbsent(key, k -> new LinkedList<>());
vals.add(val);
}
return result;
}
}

26
im-common/src/main/java/net/sopod/soim/common/util/Reflects.java

@ -1,6 +1,7 @@
package net.sopod.soim.common.util;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@ -17,16 +18,35 @@ public class Reflects {
* 获取父类上的泛型
* @return 父类上的泛型
*/
public static List<String> getSuperclassGenericTypes(Class<?> clazz) {
public static List<String> getSuperClassGenericTypes(Class<?> clazz) {
// 获取 handler 的泛型消息
Type superType = clazz.getGenericSuperclass();
String typeName = superType.getTypeName();
int idx = typeName.indexOf('<');
return parseGenericType(typeName);
}
/**
* 获取父接口上的泛型
* @return 父接口上的泛型
*/
public static List<String> getSuperInterfaceGenericTypes(Class<?> clazz) {
// 获取 handler 的泛型消息
Type[] genericTypes = clazz.getGenericInterfaces();
List<String> types = new ArrayList<>(6);
for (Type genericType : genericTypes) {
List<String> interfaceGenericTypes = parseGenericType(genericType.getTypeName());
types.addAll(interfaceGenericTypes);
}
return types;
}
private static List<String> parseGenericType(String genericClass) {
int idx = genericClass.indexOf('<');
if (idx == -1) {
// 父类没有泛型
return Collections.emptyList();
}
String genericName = typeName.substring(idx + 1, typeName.length() - 1);
String genericName = genericClass.substring(idx + 1, genericClass.length() - 1);
// 父类只有一个泛型
if (!genericName.contains(",")) {
return Collections.singletonList(genericName);

4
im-common/src/main/java/net/sopod/soim/common/util/StringUtil.java

@ -16,4 +16,8 @@ public class StringUtil {
return (new UUID(random.nextLong(), random.nextLong())).toString().replace("-", "");
}
public static boolean isEmpty(String content) {
return content == null || content.length() == 0;
}
}

2
im-core/src/main/java/net/sopod/soim/core/handler/NetUserMessageHandler.java

@ -15,7 +15,7 @@ public abstract class NetUserMessageHandler<T> implements MessageHandler<T> {
public final void exec(NetUser netUser, T msg) {
MessageLite res = handle(netUser, msg);
if (res != null) {
netUser.write(res);
netUser.writeNow(res);
}
}

2
im-core/src/main/java/net/sopod/soim/core/registry/ProtoMessageHandlerRegistry.java

@ -41,7 +41,7 @@ public class ProtoMessageHandlerRegistry {
Collection<MessageHandler> handlers = beansOfType.values();
for (MessageHandler<?> handler : handlers) {
// 获取 handler 泛型
List<String> genericTypes = Reflects.getSuperclassGenericTypes(handler.getClass());
List<String> genericTypes = Reflects.getSuperClassGenericTypes(handler.getClass());
try {
Class<?> type = genericTypes.size() == 0 ? Object.class : Class.forName(genericTypes.get(0));
MessageHandler<?> existHandler = TYPE_HANDLER_MAP.putIfAbsent(type, handler);

11
im-entry/src/main/java/net/sopod/soim/entry/EntryApplication.java

@ -1,8 +1,11 @@
package net.sopod.soim.entry;
import com.alibaba.nacos.api.exception.NacosException;
import net.sopod.soim.entry.registry.RegistryService;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
/**
* EntryMain
@ -14,8 +17,12 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
@EnableDubbo
public class EntryApplication {
public static void main(String[] args) {
SpringApplication.run(EntryApplication.class, args);
public static void main(String[] args) throws NacosException {
ConfigurableApplicationContext context = SpringApplication.run(EntryApplication.class, args);
// 注册 im-entry 服务
RegistryService registryService = context.getBean(RegistryService.class);
registryService.registryImEntry();
}
}

5
im-entry/src/main/java/net/sopod/soim/entry/config/EntryServerConfig.java

@ -1,6 +1,7 @@
package net.sopod.soim.entry.config;
import lombok.Data;
import net.sopod.soim.common.constant.AppConstant;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.stereotype.Component;
@ -17,13 +18,15 @@ import org.springframework.stereotype.Component;
@Data
public class EntryServerConfig {
private String name = "entry server";
private String name = AppConstant.APP_IM_ENTRY_NAME;
/** entry 所在服务器 ip */
private String ip = "127.0.0.1";
private Integer port = 8088;
private String nacosAddr;
/** 消息消费者线程数 */
private Integer workerSize;

7
im-entry/src/main/java/net/sopod/soim/entry/handler/auth/ReqTokenAuthHandler.java

@ -12,7 +12,7 @@ import org.springframework.stereotype.Service;
* ReqTokenAuthHandler
* 连接用户携带 token 登录
* 1.调用 token 校验解析服务获取用户信息
* 1.1 存储用户信息entry节点信息 router
* 1.1 存储用户信息entry 节点信息 router
* 2. entry channel attr(UserInfo) / return false, channel close
*
* return ResTokenAuth(success/false)
@ -28,7 +28,10 @@ public class ReqTokenAuthHandler extends NetUserMessageHandler<Auth.ReqTokenAuth
@Override
public MessageLite handle(NetUser netUser, Auth.ReqTokenAuth msg) {
logger.info("ReqTokenAuth: {}, {}", msg.getUid(), msg.getToken());
return null;
return Auth.ResTokenAuth.newBuilder()
.setSuccess(true)
.setMessage("OK")
.build();
}
}

48
im-entry/src/main/java/net/sopod/soim/entry/registry/RegistryService.java

@ -0,0 +1,48 @@
package net.sopod.soim.entry.registry;
import com.alibaba.nacos.api.NacosFactory;
import com.alibaba.nacos.api.exception.NacosException;
import com.alibaba.nacos.api.naming.NamingService;
import net.sopod.soim.common.constant.AppConstant;
import net.sopod.soim.entry.config.EntryServerConfig;
import org.apache.dubbo.registry.client.ServiceDiscoveryRegistry;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Properties;
/**
* RegistryService
*
* @author tmy
* @date 2022-04-27 16:38
*/
@Service
public class RegistryService {
private static final Logger logger = LoggerFactory.getLogger(RegistryService.class);
@Resource
private EntryServerConfig entryServerConfig;
//@Resource
private ServiceDiscoveryRegistry serviceDiscoveryRegistry;
private NamingService namingService;
public void registryImEntry() throws NacosException {
Properties properties = new Properties();
properties.put("serverAddr", entryServerConfig.getNacosAddr());
this.namingService = NacosFactory.createNamingService(properties);
// 注册当前服务
this.namingService.registerInstance(AppConstant.APP_IM_ENTRY_REGISTRY_NAME,
entryServerConfig.getIp(),
entryServerConfig.getPort()
);
logger.info("{} registry at {}:{}", AppConstant.APP_IM_ENTRY_REGISTRY_NAME, entryServerConfig.getIp(), entryServerConfig.getPort());
}
}

5
im-entry/src/main/resources/application.yml

@ -8,7 +8,10 @@ dubbo:
address: nacos://124.222.131.236:3848
group: so-im
provider:
register: false # 不向注册中心注册服务
# register: false # 不向注册中心注册服务
protocol: injvm # 服务提供只供jvm内部使用, 不暴露在外面 (不启动dubbo provider服务)
consumer:
check: false
entry-server:
nacos-addr: 124.222.131.236:3848

4
im-service/im-logic-user/src/main/resources/application.yml

@ -9,6 +9,6 @@ dubbo:
address: nacos://124.222.131.236:3848
group: so-im
protocol:
port: 3002
port: 3004
consumer:
check: false
check: false

5
im-service/im-router/pom.xml

@ -22,6 +22,11 @@
<artifactId>im-common</artifactId>
<version>${soim.version}</version>
</dependency>
<dependency>
<groupId>net.sopod</groupId>
<artifactId>im-data</artifactId>
<version>${soim.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>

7
pom.xml

@ -72,7 +72,12 @@
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>4.1.0</version>
<version>4.2.3</version>
</dependency>
<dependency>
<groupId>com.google.inject.extensions</groupId>
<artifactId>guice-multibindings</artifactId>
<version>4.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>

Loading…
Cancel
Save