Browse Source

im-router

master
tangmingyou 4 years ago
parent
commit
51706d0178
  1. 1783
      doc/db/so-im-backup-20220402180208.chnr.json
  2. 42
      doc/db/so-im.chnr.json
  3. 2
      im-client/src/main/java/net/sopod/soim/client/net/ImNetClient.java
  4. 396
      im-common/src/main/java/net/sopod/soim/common/util/HashAlgorithms.java
  5. 4
      im-common/src/main/java/net/sopod/soim/common/util/ImClock.java
  6. 19
      im-common/src/main/java/net/sopod/soim/common/util/StringUtil.java
  7. 93
      im-common/src/main/java/net/sopod/soim/common/util/TokenUtil.java
  8. 13
      im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/config/LogicTables.java
  9. 17
      im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImUser.java
  10. 2
      im-das/im-das-user/src/main/java/net/sopod/soim/das/user/service/UserDasServiceImpl.java
  11. 23
      im-das/im-das-user/src/test/java/nets/sopod/soim/das/user/dao/DasImUserShardingTest.java
  12. 788
      im-data/src/main/java/net/sopod/soim/data/msg/auth/Auth.java
  13. 11
      im-data/src/main/resources/protoSerialNoTable.txt
  14. 7
      im-data/src/main/resources/protobuf/auth/Auth.proto
  15. 3
      im-entry-http/src/main/resources/application.yml
  16. 4
      im-entry/src/main/java/net/sopod/soim/entry/handler/auth/LoginHandler.java
  17. 3
      im-service-api/im-logic-user-api/pom.xml
  18. 0
      im-service-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/user/auth/model/ImAuth.java
  19. 0
      im-service-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/user/auth/service/AuthService.java
  20. 0
      im-service-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/user/service/UserAuthService.java
  21. 0
      im-service-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/user/service/UserService.java
  22. 4
      im-service-api/im-router-api/pom.xml
  23. 31
      im-service-api/im-router-api/src/main/java/net/sopod/soim/router/api/model/CacheRes.java
  24. 12
      im-service-api/im-router-api/src/main/java/net/sopod/soim/router/api/service/AccountStoreService.java
  25. 15
      im-service-api/im-router-api/src/main/java/net/sopod/soim/router/api/service/AuthStoreService.java
  26. 3
      im-service-api/im-segment-id-api/pom.xml
  27. 3
      im-service-api/im-segment-id-api/src/main/java/net/sopod/soim/logic/api/segmentid/config/SegmentIdAutoConfiguration.java
  28. 0
      im-service-api/im-segment-id-api/src/main/java/net/sopod/soim/logic/api/segmentid/core/Segment.java
  29. 0
      im-service-api/im-segment-id-api/src/main/java/net/sopod/soim/logic/api/segmentid/core/SegmentIdGenerator.java
  30. 0
      im-service-api/im-segment-id-api/src/main/java/net/sopod/soim/logic/api/segmentid/model/NextSegmentParam.java
  31. 0
      im-service-api/im-segment-id-api/src/main/java/net/sopod/soim/logic/api/segmentid/model/SegmentRange.java
  32. 10
      im-service-api/im-segment-id-api/src/main/java/net/sopod/soim/logic/api/segmentid/service/SegmentIdService.java
  33. 0
      im-service-api/im-segment-id-api/src/main/resources/META-INF/spring-configuration-metadata.json
  34. 0
      im-service-api/im-segment-id-api/src/main/resources/META-INF/spring.factories
  35. 21
      im-service-api/pom.xml
  36. 2
      im-service/im-logic-user/pom.xml
  37. 0
      im-service/im-logic-user/src/main/java/net/sopod/soim/logic/user/LogicUserApplication.java
  38. 0
      im-service/im-logic-user/src/main/java/net/sopod/soim/logic/user/service/UserAuthServiceImpl.java
  39. 0
      im-service/im-logic-user/src/main/java/net/sopod/soim/logic/user/service/UserServiceImpl.java
  40. 0
      im-service/im-logic-user/src/main/resources/application.yml
  41. 72
      im-service/im-router/pom.xml
  42. 21
      im-service/im-router/src/main/java/net/sopod/soim/router/RouterApplication.java
  43. 34
      im-service/im-router/src/main/java/net/sopod/soim/router/service/AuthStoreServiceImpl.java
  44. 25
      im-service/im-router/src/main/resources/application.yml
  45. 2
      im-service/im-segment-id/pom.xml
  46. 0
      im-service/im-segment-id/src/main/java/net/sopod/soim/logic/segmentid/SegmentIdApplication.java
  47. 0
      im-service/im-segment-id/src/main/java/net/sopod/soim/logic/segmentid/config/SegmentConfig.java
  48. 0
      im-service/im-segment-id/src/main/java/net/sopod/soim/logic/segmentid/mapper/SegmentIdMapper.java
  49. 0
      im-service/im-segment-id/src/main/java/net/sopod/soim/logic/segmentid/model/entity/SegmentId.java
  50. 2
      im-service/im-segment-id/src/main/java/net/sopod/soim/logic/segmentid/service/SegmentIdServiceImpl.java
  51. 0
      im-service/im-segment-id/src/main/java/net/sopod/soim/logic/segmentid/util/RedisLockUtil.java
  52. 0
      im-service/im-segment-id/src/main/resources/application.yml
  53. 0
      im-service/im-segment-id/src/main/resources/mapper/SegmentIdMapper.xml
  54. 0
      im-service/im-segment-id/src/test/java/net/sopod/soim/logic/segmentid/test/SegmentIdApplicationTest.java
  55. 4
      im-service/pom.xml
  56. 12
      pom.xml

1783
doc/db/so-im-backup-20220402180208.chnr.json

File diff suppressed because it is too large Load Diff

42
doc/db/so-im.chnr.json

@ -4,7 +4,7 @@
"avatar": "", "avatar": "",
"version": "3.5.7", "version": "3.5.7",
"createdTime": "2022-3-7 15:11:08", "createdTime": "2022-3-7 15:11:08",
"updatedTime": "2022-4-2 15:02:54", "updatedTime": "2022-4-14 16:00:46",
"profile": { "profile": {
"default": { "default": {
"db": "8FE7C65E-40EB-41B6-B60E-79063AFF6273", "db": "8FE7C65E-40EB-41B6-B60E-79063AFF6273",
@ -897,8 +897,8 @@
"id": "F06C0F3B-A0F1-47EC-80E5-F57ABD41984F" "id": "F06C0F3B-A0F1-47EC-80E5-F57ABD41984F"
}, },
{ {
"defKey": "username", "defKey": "status",
"defName": "用户名", "defName": "状态:1.正常,2.禁用,3删除",
"comment": "", "comment": "",
"type": "", "type": "",
"len": "", "len": "",
@ -909,9 +909,41 @@
"defaultValue": "", "defaultValue": "",
"hideInGraph": false, "hideInGraph": false,
"refDict": "", "refDict": "",
"domain": "BB0241B4-A9DB-46CB-AB7D-EA6DDA6A02D6", "domain": "CBE2B93C-DD97-4950-86A8-B583971583C8",
"id": "ED141994-B3F8-42C8-96AE-91244E115A35"
},
{
"defKey": "account",
"defName": "登录账号",
"comment": "",
"type": "",
"len": "",
"scale": "",
"primaryKey": false,
"notNull": true,
"autoIncrement": false,
"defaultValue": "",
"hideInGraph": false,
"refDict": "",
"domain": "CC17D845-14BD-443E-B780-AC2C9FF59306",
"id": "BB5539DD-5A96-4729-AF84-205D99479F51" "id": "BB5539DD-5A96-4729-AF84-205D99479F51"
}, },
{
"defKey": "nickname",
"defName": "用户昵称",
"comment": "",
"type": "",
"len": "",
"scale": "",
"primaryKey": false,
"notNull": false,
"autoIncrement": false,
"defaultValue": "",
"hideInGraph": false,
"refDict": "",
"domain": "BB0241B4-A9DB-46CB-AB7D-EA6DDA6A02D6",
"id": "85C805F2-4AEC-4AAE-B607-415D9B4544A2"
},
{ {
"defKey": "password", "defKey": "password",
"defName": "密码", "defName": "密码",
@ -920,7 +952,7 @@
"len": "", "len": "",
"scale": "", "scale": "",
"primaryKey": false, "primaryKey": false,
"notNull": true, "notNull": false,
"autoIncrement": false, "autoIncrement": false,
"defaultValue": "", "defaultValue": "",
"hideInGraph": false, "hideInGraph": false,

2
im-client/src/main/java/net/sopod/soim/client/net/ImNetClient.java

@ -43,7 +43,7 @@ public class ImNetClient {
.setId(1) .setId(1)
.setStr("手") .setStr("手")
.build(); .build();
Auth.Login login = Auth.Login.newBuilder() Auth.ReqLogin login = Auth.ReqLogin.newBuilder()
.setAccount("prometheus") .setAccount("prometheus")
.setPassword("123456") .setPassword("123456")
.build(); .build();

396
im-common/src/main/java/net/sopod/soim/common/util/HashAlgorithms.java

@ -0,0 +1,396 @@
package net.sopod.soim.common.util;
/**
* hash函数
* https://zhuanlan.zhihu.com/p/101390996
*
* @author tangmingyou
* @date 2021-10-28 10:33
*/
public class HashAlgorithms {
/**
* 加法hash
*
* @param key 字符串
* @param prime 一个质数
* @return hash结果
*/
public static int additiveHash(String key, int prime) {
int hash, i;
for (hash = key.length(), i = 0; i < key.length(); i++)
hash += key.charAt(i);
return (hash % prime);
}
/**
* 旋转hash
*
* @param key 输入字符串
* @param prime 质数
* @return hash值
*/
public static int rotatingHash(String key, int prime) {
int hash, i;
for (hash = key.length(), i = 0; i < key.length(); ++i)
hash = (hash << 4) ^ (hash >> 28) ^ key.charAt(i);
return (hash % prime);
// return (hash ^ (hash>>10) ^ (hash>>20));
}
// 替代:
// 使用:hash = (hash ^ (hash>>10) ^ (hash>>20)) & mask;
// 替代:hash %= prime;
/**/
/**
* MASK值随便找一个值最好是质数
*/
static int M_MASK = 0x8765fed1;
/**
* 一次一个hash
*
* @param key 输入字符串
* @return 输出hash值
*/
public static int oneByOneHash(String key) {
int hash, i;
for (hash = 0, i = 0; i < key.length(); ++i) {
hash += key.charAt(i);
hash += (hash << 10);
hash ^= (hash >> 6);
}
hash += (hash << 3);
hash ^= (hash >> 11);
hash += (hash << 15);
// return (hash & M_MASK);
return hash;
}
/**
* Bernstein's hash
*
* @param key 输入字节数组
* @return 结果hash
*/
public static int bernstein(String key) {
int hash = 0;
int i;
for (i = 0; i < key.length(); ++i) hash = 33 * hash + key.charAt(i);
return hash;
}
//
/**///// Pearson's Hash
// char pearson(char[]key, ub4 len, char tab[256])
// {
// char hash;
// ub4 i;
// for (hash=len, i=0; i<len; ++i)
// hash=tab[hash^key[i]];
// return (hash);
// }
/**///// CRC Hashing,计算crc,具体代码见其他
// ub4 crc(char *key, ub4 len, ub4 mask, ub4 tab[256])
// {
// ub4 hash, i;
// for (hash=len, i=0; i<len; ++i)
// hash = (hash >> 8) ^ tab[(hash & 0xff) ^ key[i]];
// return (hash & mask);
// }
/**/
/**
* CRC系列算法本身并非查表可是查表是它的一种最快的实现方式以下是CRC32的实现
*/
private static int[] signed_crc_table() {
int c = 0;
int[] table = new int[256];
for (int n = 0; n != 256; ++n) {
c = n;
c = ((c & 1) != 0 ? (-306674912 ^ (c >>> 1)) : (c >>> 1));
c = ((c & 1) != 0 ? (-306674912 ^ (c >>> 1)) : (c >>> 1));
c = ((c & 1) != 0 ? (-306674912 ^ (c >>> 1)) : (c >>> 1));
c = ((c & 1) != 0 ? (-306674912 ^ (c >>> 1)) : (c >>> 1));
c = ((c & 1) != 0 ? (-306674912 ^ (c >>> 1)) : (c >>> 1));
c = ((c & 1) != 0 ? (-306674912 ^ (c >>> 1)) : (c >>> 1));
c = ((c & 1) != 0 ? (-306674912 ^ (c >>> 1)) : (c >>> 1));
c = ((c & 1) != 0 ? (-306674912 ^ (c >>> 1)) : (c >>> 1));
table[n] = c;
}
return table;
}
private static final int[] T = signed_crc_table();
/**
* CRC32 的查表实现
*/
public static int crc32(String str, int seed) {
int C = ~seed; // 按位取反 seed ^ -1
for (int i = 0, L = str.length(), c, d; i < L; ) {
c = str.charAt(i++);
if (c < 0x80) {
C = (C >>> 8) ^ T[(C ^ c) & 0xFF];
} else if (c < 0x800) {
C = (C >>> 8) ^ T[(C ^ (192 | ((c >> 6) & 31))) & 0xFF];
C = (C >>> 8) ^ T[(C ^ (128 | (c & 63))) & 0xFF];
} else if (c >= 0xD800 && c < 0xE000) {
c = (c & 1023) + 64;
d = str.charAt(i++) & 1023;
C = (C >>> 8) ^ T[(C ^ (240 | ((c >> 8) & 7))) & 0xFF];
C = (C >>> 8) ^ T[(C ^ (128 | ((c >> 2) & 63))) & 0xFF];
C = (C >>> 8) ^ T[(C ^ (128 | ((d >> 6) & 15) | ((c & 3) << 4))) & 0xFF];
C = (C >>> 8) ^ T[(C ^ (128 | (d & 63))) & 0xFF];
} else {
C = (C >>> 8) ^ T[(C ^ (224 | ((c >> 12) & 15))) & 0xFF];
C = (C >>> 8) ^ T[(C ^ (128 | ((c >> 6) & 63))) & 0xFF];
C = (C >>> 8) ^ T[(C ^ (128 | (c & 63))) & 0xFF];
}
}
return ~C;
}
/**
* Universal Hashing
*/
public static int universal(char[] key, int mask, int[] tab) {
int hash = key.length, i, len = key.length;
for (i = 0; i < (len << 3); i += 8) {
char k = key[i >> 3];
if ((k & 0x01) == 0) hash ^= tab[i + 0];
if ((k & 0x02) == 0) hash ^= tab[i + 1];
if ((k & 0x04) == 0) hash ^= tab[i + 2];
if ((k & 0x08) == 0) hash ^= tab[i + 3];
if ((k & 0x10) == 0) hash ^= tab[i + 4];
if ((k & 0x20) == 0) hash ^= tab[i + 5];
if ((k & 0x40) == 0) hash ^= tab[i + 6];
if ((k & 0x80) == 0) hash ^= tab[i + 7];
}
return (hash & mask);
}
/**
* Zobrist Hashing
*/
public static int zobrist(char[] key, int mask, int[][] tab) {
int hash, i;
for (hash = key.length, i = 0; i < key.length; ++i)
hash ^= tab[i][key[i]];
return (hash & mask);
}
// LOOKUP3
// 见Bob Jenkins(3).c文件
// 32位FNV算法
static int M_SHIFT = 0;
/**
* 32位的FNV算法
*
* @param data 数组
* @return int值
*/
public static int FNVHash(byte[] data) {
int hash = (int) 2166136261L;
for (byte b : data)
hash = (hash * 16777619) ^ b;
if (M_SHIFT == 0)
return hash;
return (hash ^ (hash >> M_SHIFT)) & M_MASK;
}
/**
* 改进的32位FNV算法1
*
* @param data 数组
* @return int值
*/
public static int FNVHash1(byte[] data) {
final int p = 16777619;
int hash = (int) 2166136261L;
for (byte b : data)
hash = (hash ^ b) * p;
hash += hash << 13;
hash ^= hash >> 7;
hash += hash << 3;
hash ^= hash >> 17;
hash += hash << 5;
return hash;
}
/**
* FNV-1a HASH
* 改进的32位FNV算法1
* <p>
* costarring ...碰撞 liquid
* declinate ...碰撞 macallums
* altarage ...碰撞 zinke
* altarages ...碰撞 zinkes
*
* @param data 字符串
* @return int值
*/
public static int FNVHash1a(String data) {
final int p = 16777619;
int hash = (int) 2166136261L;
for (int i = 0; i < data.length(); i++)
hash = (hash ^ data.charAt(i)) * p;
hash += hash << 13;
hash ^= hash >> 7;
hash += hash << 3;
hash ^= hash >> 17;
hash += hash << 5;
return hash;
}
/**
* Thomas Wang的算法整数hash
*/
public static int intHash(int key) {
key += ~(key << 15);
key ^= (key >>> 10);
key += (key << 3);
key ^= (key >>> 6);
key += ~(key << 11);
key ^= (key >>> 16);
return key;
}
/**
* RS算法hash
*
* @param str 字符串
*/
public static int RSHash(String str) {
int b = 378551;
int a = 63689;
int hash = 0;
for (int i = 0; i < str.length(); i++) {
hash = hash * a + str.charAt(i);
a = a * b;
}
return (hash & 0x7FFFFFFF);
}
/* End Of RS Hash Function */
/**
* JS算法
*/
public static int JSHash(String str) {
int hash = 1315423911;
for (int i = 0; i < str.length(); i++) {
hash ^= ((hash << 5) + str.charAt(i) + (hash >> 2));
}
return (hash & 0x7FFFFFFF);
}
/**//* End Of JS Hash Function */
/**
* PJW算法
*/
public static int PJWHash(String str) {
int BitsInUnsignedInt = 32;
int ThreeQuarters = (BitsInUnsignedInt * 3) / 4;
int OneEighth = BitsInUnsignedInt / 8;
int HighBits = 0xFFFFFFFF << (BitsInUnsignedInt - OneEighth);
int hash = 0;
int test = 0;
for (int i = 0; i < str.length(); i++) {
hash = (hash << OneEighth) + str.charAt(i);
if ((test = hash & HighBits) != 0) {
hash = ((hash ^ (test >> ThreeQuarters)) & (~HighBits));
}
}
return (hash & 0x7FFFFFFF);
}
/* End Of P. J. Weinberger Hash Function */
/**
* ELF算法
*/
public static int ELFHash(String str) {
int hash = 0;
int x = 0;
for (int i = 0; i < str.length(); i++) {
hash = (hash << 4) + str.charAt(i);
if ((x = (int) (hash & 0xF0000000L)) != 0) {
hash ^= (x >> 24);
hash &= ~x;
}
}
return (hash & 0x7FFFFFFF);
}
/**
* BKDR算法
*/
public static int BKDRHash(String str) {
int seed = 131; // 31 131 1313 13131 131313 etc..
int hash = 0;
for (int i = 0; i < str.length(); i++) {
hash = (hash * seed) + str.charAt(i);
}
return (hash & 0x7FFFFFFF);
}
/**
* SDBM算法
*/
public static int SDBMHash(String str) {
int hash = 0;
for (int i = 0; i < str.length(); i++) {
hash = str.charAt(i) + (hash << 6) + (hash << 16) - hash;
}
return (hash & 0x7FFFFFFF);
}
/**
* DJB算法
*/
public static int DJBHash(String str) {
int hash = 5381;
for (int i = 0; i < str.length(); i++) {
hash = ((hash << 5) + hash) + str.charAt(i);
}
return (hash & 0x7FFFFFFF);
}
/**
* DEK算法
*/
public static int DEKHash(String str) {
int hash = str.length();
for (int i = 0; i < str.length(); i++) {
hash = ((hash << 5) ^ (hash >> 27)) ^ str.charAt(i);
}
return (hash & 0x7FFFFFFF);
}
/**
* AP算法
*/
public static int APHash(String str) {
int hash = 0;
for (int i = 0; i < str.length(); i++) {
hash ^= ((i & 1) == 0) ? ((hash << 7) ^ str.charAt(i) ^ (hash >> 3)) :
(~((hash << 11) ^ str.charAt(i) ^ (hash >> 5)));
}
// return (hash & 0x7FFFFFFF);
return hash;
}
/**
* JAVA自己带的算法
*/
public static int java(String str) {
int h = 0;
int off = 0;
int len = str.length();
for (int i = 0; i < len; i++) {
h = 31 * h + str.charAt(off++);
}
return h;
}
}

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

@ -35,8 +35,8 @@ public class ImClock {
return new Date(clock.millis()); return new Date(clock.millis());
} }
public static LocalDateTime msec2time(long msec) { public static LocalDateTime millis2time(long millis) {
Instant instant = Instant.ofEpochMilli(msec); Instant instant = Instant.ofEpochMilli(millis);
return LocalDateTime.ofInstant(instant, ZoneId.systemDefault()); return LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
} }

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

@ -0,0 +1,19 @@
package net.sopod.soim.common.util;
import java.util.UUID;
import java.util.concurrent.ThreadLocalRandom;
/**
* StringUtil
*
* @author tmy
* @date 2022-04-14 11:10
*/
public class StringUtil {
public static String randomUUID() {
ThreadLocalRandom random = ThreadLocalRandom.current();
return (new UUID(random.nextLong(), random.nextLong())).toString().replace("-", "");
}
}

93
im-common/src/main/java/net/sopod/soim/common/util/TokenUtil.java

@ -0,0 +1,93 @@
package net.sopod.soim.common.util;
import java.nio.ByteBuffer;
import java.util.Base64;
import java.util.concurrent.ThreadLocalRandom;
/**
* TokenUtil
*
* @author tmy
* @date 2022-04-14 14:04
*/
public class TokenUtil {
/** TODO 后期存储到全局缓存中 */
private static final String SALT = "ac614c954663124b62043e720e5c144d";
/***
* base64({id:1,time:unix}) + ".sign(payload)"
*/
public static String genToken(long userId) {
int random = ThreadLocalRandom.current().nextInt();
ByteBuffer buf = ByteBuffer.allocate(20);
buf.putLong(ImClock.millis());
buf.putLong(userId);
buf.putInt(random);
byte[] bytes = buf.array();
String payload = Base64.getUrlEncoder().encodeToString(bytes);
// TODO 其他hash算法
String signStr = sign(payload);
return payload + "." + signStr;
}
public static Payload validateAndParse(String token) {
int idx = token.indexOf('.');
if (idx == -1) return null;
String payload = token.substring(0, idx);
String sign = token.substring(idx + 1);
String calcSign = sign(payload);
if (!calcSign.equals(sign)) return null;
byte[] payloadBytes = Base64.getUrlDecoder().decode(payload);
ByteBuffer buf = ByteBuffer.wrap(payloadBytes);
Payload p = new Payload();
p.time = buf.getLong();
p.userId = buf.getLong();
p.random = buf.getInt();
return p;
}
public static class Payload {
long time;
long userId;
int random;
public long getTime() {
return time;
}
public long getUserId() {
return userId;
}
public int getRandom() {
return random;
}
@Override
public String toString() {
return "Payload{" +
"time=" + time +
", userId=" + userId +
", random=" + random +
'}';
}
}
private static String sign(String payload) {
// TODO 其他hash算法
int sign = HashAlgorithms.crc32(payload + SALT, 10086);
byte[] signBytes = ByteBuffer.allocate(4).putInt(sign).array();
return Base64.getUrlEncoder().encodeToString(signBytes);
}
public static void main(String[] args) throws InterruptedException {
for (int i = 0; i < 10; i++) {
long uid = Math.abs(ThreadLocalRandom.current().nextLong());
String token = genToken(uid);
Payload payload = validateAndParse(i == 3 ? token + "=" : token);
System.out.println(token);
System.out.println(uid + ": " + payload);
Thread.sleep(2000L);
}
}
}

13
im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/config/LogicTables.java

@ -0,0 +1,13 @@
package net.sopod.soim.das.user.api.config;
/**
* LogicTables
*
* @author tmy
* @date 2022-04-14 10:15
*/
public interface LogicTables {
String IM_USER = "im_user";
}

17
im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImUser.java

@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import net.sopod.soim.das.user.api.config.LogicTables;
import java.util.Date; import java.util.Date;
@ -17,16 +18,24 @@ import java.util.Date;
*/ */
@Data @Data
@Accessors(chain = true) @Accessors(chain = true)
@TableName("im_user") @TableName(LogicTables.IM_USER)
public class ImUser { public class ImUser {
/** id */ /** id */
@TableId(value = "id", type= IdType.INPUT) @TableId(value = "id", type= IdType.INPUT)
private Long id; private Long id;
/** 用户名 */ /** 状态:1.正常,2.禁用,3删除 */
@TableField(value = "username") @TableField(value = "status")
private String username; private Integer status;
/** 登录账号 */
@TableField(value = "account")
private String account;
/** 用户昵称 */
@TableField(value = "nickname")
private String nickname;
/** 密码 */ /** 密码 */
@TableField(value = "password") @TableField(value = "password")

2
im-das/im-das-user/src/main/java/net/sopod/soim/das/user/service/UserDasServiceImpl.java

@ -28,7 +28,7 @@ public class UserDasServiceImpl implements UserDasService {
@Override @Override
public ImUser getUserByAccount(String account) { public ImUser getUserByAccount(String account) {
LambdaQueryWrapper<ImUser> accountQuery = new QueryWrapper<ImUser>().lambda() LambdaQueryWrapper<ImUser> accountQuery = new QueryWrapper<ImUser>().lambda()
.eq(ImUser::getUsername, account); .eq(ImUser::getAccount, account);
return userMapper.selectOne(accountQuery); return userMapper.selectOne(accountQuery);
} }

23
im-das/im-das-user/src/test/java/nets/sopod/soim/das/user/dao/DasImUserShardingTest.java

@ -1,15 +1,20 @@
package nets.sopod.soim.das.user.dao; package nets.sopod.soim.das.user.dao;
import com.google.common.base.Preconditions;
import net.sopod.soim.common.util.ImClock; import net.sopod.soim.common.util.ImClock;
import net.sopod.soim.das.user.DasUserApplication; import net.sopod.soim.das.user.DasUserApplication;
import net.sopod.soim.das.user.api.model.entity.ImUser; import net.sopod.soim.das.user.api.model.entity.ImUser;
import net.sopod.soim.das.user.api.config.LogicTables;
import net.sopod.soim.das.user.dao.UserMapper; import net.sopod.soim.das.user.dao.UserMapper;
import net.sopod.soim.logic.api.segmentid.core.SegmentIdGenerator;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import javax.annotation.Resource;
/** /**
* DasUserApplication * DasUserApplication
* *
@ -23,15 +28,27 @@ public class DasImUserShardingTest {
@Autowired @Autowired
private UserMapper userMapper; private UserMapper userMapper;
@Resource
private SegmentIdGenerator segmentIdGen;
@Test @Test
public void test() { public void test() {
long userId = segmentIdGen.nextId(LogicTables.IM_USER);
ImUser user1 = new ImUser() ImUser user1 = new ImUser()
.setId(5L) .setId(userId)
.setUsername("野孩子5") .setStatus(1)
.setAccount("poros")
.setNickname("波罗斯")
.setPassword("123456") .setPassword("123456")
.setPhone("17882451908") .setPhone("17882451902")
.setCreateTime(ImClock.date()); .setCreateTime(ImClock.date());
userMapper.insert(user1); userMapper.insert(user1);
ImUser imUser = userMapper.selectById(userId);
Preconditions.checkState(imUser != null
&& user1.getAccount().equals(imUser.getAccount())
&& user1.getPhone().equals(imUser.getPhone())
);
} }
} }

788
im-data/src/main/java/net/sopod/soim/data/msg/auth/Auth.java

File diff suppressed because it is too large Load Diff

11
im-data/src/main/resources/protoSerialNoTable.txt

@ -1,5 +1,6 @@
net.sopod.soim.data.msg.hello.HelloPB$World=10000 net.sopod.soim.data.msg.net.HeartBeat$Ping=10000
net.sopod.soim.data.msg.net.HeartBeat$Ping=10001 net.sopod.soim.data.msg.net.HeartBeat$Pong=10001
net.sopod.soim.data.msg.net.HeartBeat$Pong=10002 net.sopod.soim.data.msg.auth.Auth$ResLogin=10002
net.sopod.soim.data.msg.auth.Auth$Login=10003 net.sopod.soim.data.msg.hello.HelloPB$Hello=10003
net.sopod.soim.data.msg.hello.HelloPB$Hello=10004 net.sopod.soim.data.msg.auth.Auth$ReqLogin=10004
net.sopod.soim.data.msg.hello.HelloPB$World=10005

7
im-data/src/main/resources/protobuf/auth/Auth.proto

@ -6,7 +6,12 @@ option java_outer_classname = "Auth";
option java_package = "net.sopod.soim.data.msg.auth"; option java_package = "net.sopod.soim.data.msg.auth";
// option objc_class_prefix = "DEMOSRV"; // option objc_class_prefix = "DEMOSRV";
message Login { message ReqLogin {
string account = 1; string account = 1;
string password = 2; string password = 2;
} }
message ResLogin {
int32 code = 1;
string message = 2;
}

3
im-entry-http/src/main/resources/application.yml

@ -12,3 +12,6 @@ dubbo:
protocol: injvm # 服务提供只供jvm内部使用, 不暴露在外面 (不启动dubbo provider服务) protocol: injvm # 服务提供只供jvm内部使用, 不暴露在外面 (不启动dubbo provider服务)
consumer: consumer:
check: false check: false
server:
port: 3021

4
im-entry/src/main/java/net/sopod/soim/entry/handler/auth/LoginHandler.java

@ -16,12 +16,12 @@ import org.springframework.stereotype.Service;
* @date 2022-04-13 22:20 * @date 2022-04-13 22:20
*/ */
@Service @Service
public class LoginHandler extends NetUserMessageHandler<Auth.Login> { public class LoginHandler extends NetUserMessageHandler<Auth.ReqLogin> {
private static final Logger logger = LoggerFactory.getLogger(LoginHandler.class); private static final Logger logger = LoggerFactory.getLogger(LoginHandler.class);
@Override @Override
public MessageLite handle(NetUser netUser, Auth.Login msg) { public MessageLite handle(NetUser netUser, Auth.ReqLogin msg) {
logger.info("auth login: {}, {}", msg.getAccount(), msg.getPassword()); logger.info("auth login: {}, {}", msg.getAccount(), msg.getPassword());
Account account = Account.AccountBuilder.newBuilder() Account account = Account.AccountBuilder.newBuilder()
.setNetUser(netUser) .setNetUser(netUser)

3
im-logic-api/im-logic-user-api/pom.xml → im-service-api/im-logic-user-api/pom.xml

@ -3,10 +3,9 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent> <parent>
<artifactId>so-im</artifactId> <artifactId>im-service-api</artifactId>
<groupId>net.sopod</groupId> <groupId>net.sopod</groupId>
<version>1.0.0</version> <version>1.0.0</version>
<relativePath>../../pom.xml</relativePath>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

0
im-logic-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/user/auth/model/ImAuth.java → im-service-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/user/auth/model/ImAuth.java

0
im-logic-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/user/auth/service/AuthService.java → im-service-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/user/auth/service/AuthService.java

0
im-logic-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/user/service/UserAuthService.java → im-service-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/user/service/UserAuthService.java

0
im-logic-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/user/service/UserService.java → im-service-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/user/service/UserService.java

4
im-logic-api/pom.xml → im-service-api/im-router-api/pom.xml

@ -3,13 +3,13 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent> <parent>
<artifactId>so-im</artifactId> <artifactId>im-service-api</artifactId>
<groupId>net.sopod</groupId> <groupId>net.sopod</groupId>
<version>1.0.0</version> <version>1.0.0</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>im-logic-api</artifactId> <artifactId>im-router-api</artifactId>
</project> </project>

31
im-service-api/im-router-api/src/main/java/net/sopod/soim/router/api/model/CacheRes.java

@ -0,0 +1,31 @@
package net.sopod.soim.router.api.model;
import lombok.Data;
/**
* CacheRes
*
* @author tmy
* @date 2022-04-14 15:13
*/
@Data
public class CacheRes {
/**
* 是否缓存成功
*/
private Boolean success;
/**
* 过期时间戳(毫秒)0不过期
*/
private Long expire;
public static CacheRes success(Long expire) {
CacheRes res = new CacheRes();
res.setSuccess(Boolean.TRUE);
res.setExpire(expire);
return res;
}
}

12
im-service-api/im-router-api/src/main/java/net/sopod/soim/router/api/service/AccountStoreService.java

@ -0,0 +1,12 @@
package net.sopod.soim.router.api.service;
/**
* AccountStoreService
* 缓存登录账号信息entry 节点信息...
*
* @author tmy
* @date 2022-04-14 15:22
*/
public interface AccountStoreService {
}

15
im-service-api/im-router-api/src/main/java/net/sopod/soim/router/api/service/AuthStoreService.java

@ -0,0 +1,15 @@
package net.sopod.soim.router.api.service;
import net.sopod.soim.router.api.model.CacheRes;
/**
* RouterService
*
* @author tmy
* @date 2022-04-14 11:22
*/
public interface AuthStoreService {
CacheRes cacheToken(Long userId, String token);
}

3
im-logic-api/im-segment-id-api/pom.xml → im-service-api/im-segment-id-api/pom.xml

@ -3,10 +3,9 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent> <parent>
<artifactId>so-im</artifactId> <artifactId>im-service-api</artifactId>
<groupId>net.sopod</groupId> <groupId>net.sopod</groupId>
<version>1.0.0</version> <version>1.0.0</version>
<relativePath>../../pom.xml</relativePath>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

3
im-logic-api/im-segment-id-api/src/main/java/net/sopod/soim/logic/api/segmentid/config/SegmentIdAutoConfiguration.java → im-service-api/im-segment-id-api/src/main/java/net/sopod/soim/logic/api/segmentid/config/SegmentIdAutoConfiguration.java

@ -22,7 +22,7 @@ import org.springframework.context.annotation.Configuration;
@Configuration @Configuration
public class SegmentIdAutoConfiguration { public class SegmentIdAutoConfiguration {
@DubboReference @DubboReference//(version = "*") //SegmentIdService.Version.v1)
private SegmentIdService segmentIdService; private SegmentIdService segmentIdService;
@Bean @Bean
@ -33,5 +33,4 @@ public class SegmentIdAutoConfiguration {
return new SegmentIdGenerator(segmentIdService); return new SegmentIdGenerator(segmentIdService);
} }
} }

0
im-logic-api/im-segment-id-api/src/main/java/net/sopod/soim/logic/api/segmentid/core/Segment.java → im-service-api/im-segment-id-api/src/main/java/net/sopod/soim/logic/api/segmentid/core/Segment.java

0
im-logic-api/im-segment-id-api/src/main/java/net/sopod/soim/logic/api/segmentid/core/SegmentIdGenerator.java → im-service-api/im-segment-id-api/src/main/java/net/sopod/soim/logic/api/segmentid/core/SegmentIdGenerator.java

0
im-logic-api/im-segment-id-api/src/main/java/net/sopod/soim/logic/api/segmentid/model/NextSegmentParam.java → im-service-api/im-segment-id-api/src/main/java/net/sopod/soim/logic/api/segmentid/model/NextSegmentParam.java

0
im-logic-api/im-segment-id-api/src/main/java/net/sopod/soim/logic/api/segmentid/model/SegmentRange.java → im-service-api/im-segment-id-api/src/main/java/net/sopod/soim/logic/api/segmentid/model/SegmentRange.java

10
im-logic-api/im-segment-id-api/src/main/java/net/sopod/soim/logic/api/segmentid/service/SegmentIdService.java → im-service-api/im-segment-id-api/src/main/java/net/sopod/soim/logic/api/segmentid/service/SegmentIdService.java

@ -14,4 +14,14 @@ public interface SegmentIdService {
SegmentRange nextSegmentId(String bizTag, Long step); SegmentRange nextSegmentId(String bizTag, Long step);
interface Version {
/**
* 基本功能获取业务标签对应的分段id范围
* 大版本向下兼容
*/
String v1 = "1";
}
} }

0
im-logic-api/im-segment-id-api/src/main/resources/META-INF/spring-configuration-metadata.json → im-service-api/im-segment-id-api/src/main/resources/META-INF/spring-configuration-metadata.json

0
im-logic-api/im-segment-id-api/src/main/resources/META-INF/spring.factories → im-service-api/im-segment-id-api/src/main/resources/META-INF/spring.factories

21
im-service-api/pom.xml

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>so-im</artifactId>
<groupId>net.sopod</groupId>
<version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>im-service-api</artifactId>
<packaging>pom</packaging>
<modules>
<module>im-segment-id-api</module>
<module>im-router-api</module>
<module>im-logic-user-api</module>
</modules>
</project>

2
im-logic/im-logic-user/pom.xml → im-service/im-logic-user/pom.xml

@ -3,7 +3,7 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent> <parent>
<artifactId>im-logic</artifactId> <artifactId>im-service</artifactId>
<groupId>net.sopod</groupId> <groupId>net.sopod</groupId>
<version>1.0.0</version> <version>1.0.0</version>
</parent> </parent>

0
im-logic/im-logic-user/src/main/java/net/sopod/soim/logic/user/LogicUserApplication.java → im-service/im-logic-user/src/main/java/net/sopod/soim/logic/user/LogicUserApplication.java

0
im-logic/im-logic-user/src/main/java/net/sopod/soim/logic/user/service/UserAuthServiceImpl.java → im-service/im-logic-user/src/main/java/net/sopod/soim/logic/user/service/UserAuthServiceImpl.java

0
im-logic/im-logic-user/src/main/java/net/sopod/soim/logic/user/service/UserServiceImpl.java → im-service/im-logic-user/src/main/java/net/sopod/soim/logic/user/service/UserServiceImpl.java

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

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

@ -0,0 +1,72 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>im-service</artifactId>
<groupId>net.sopod</groupId>
<version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>im-router</artifactId>
<dependencies>
<dependency>
<groupId>net.sopod</groupId>
<artifactId>im-router-api</artifactId>
<version>${soim.version}</version>
</dependency>
<dependency>
<groupId>net.sopod</groupId>
<artifactId>im-common</artifactId>
<version>${soim.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions><!-- 去掉springboot默认logback日志配置 -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</exclusion>
<exclusion>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>

21
im-service/im-router/src/main/java/net/sopod/soim/router/RouterApplication.java

@ -0,0 +1,21 @@
package net.sopod.soim.router;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* RouterApplication
*
* @author tmy
* @date 2022-04-14 11:45
*/
@EnableDubbo(scanBasePackages = {"net.sopod.soim.router.service"})
@SpringBootApplication
public class RouterApplication {
public static void main(String[] args) {
SpringApplication.run(RouterApplication.class, args);
}
}

34
im-service/im-router/src/main/java/net/sopod/soim/router/service/AuthStoreServiceImpl.java

@ -0,0 +1,34 @@
package net.sopod.soim.router.service;
import net.sopod.soim.common.util.ImClock;
import net.sopod.soim.router.api.model.CacheRes;
import net.sopod.soim.router.api.service.AuthStoreService;
import org.apache.dubbo.config.annotation.DubboService;
import java.util.concurrent.ConcurrentHashMap;
/**
* AuthStoreServiceImpl
*
* @author tmy
* @date 2022-04-14 11:23
*/
@DubboService
public class AuthStoreServiceImpl implements AuthStoreService {
private final ConcurrentHashMap<Long, String> tokenStore;
public AuthStoreServiceImpl() {
tokenStore = new ConcurrentHashMap<>();
}
@Override
public CacheRes cacheToken(Long userId, String token) {
// 从内存中获取
tokenStore.put(userId, token);
// 从redis中获取
return CacheRes.success(ImClock.millis() + 120_1000);
}
}

25
im-service/im-router/src/main/resources/application.yml

@ -0,0 +1,25 @@
spring:
application:
name: im-router
redis:
host: 124.222.131.236
port: 3379
password: sopod@redis#
lettuce:
pool:
max-active: 100
max-idle: 100
max-wait: 1000
min-idle: 2
dubbo:
application:
name: ${spring.application.name}
registry:
address: nacos://124.222.131.236:3848
group: so-im
protocol:
name: dubbo
port: 3031
host: 0.0.0.0
# ssl-enabled:

2
im-logic/im-segment-id/pom.xml → im-service/im-segment-id/pom.xml

@ -3,7 +3,7 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent> <parent>
<artifactId>im-logic</artifactId> <artifactId>im-service</artifactId>
<groupId>net.sopod</groupId> <groupId>net.sopod</groupId>
<version>1.0.0</version> <version>1.0.0</version>
</parent> </parent>

0
im-logic/im-segment-id/src/main/java/net/sopod/soim/logic/segmentid/SegmentIdApplication.java → im-service/im-segment-id/src/main/java/net/sopod/soim/logic/segmentid/SegmentIdApplication.java

0
im-logic/im-segment-id/src/main/java/net/sopod/soim/logic/segmentid/config/SegmentConfig.java → im-service/im-segment-id/src/main/java/net/sopod/soim/logic/segmentid/config/SegmentConfig.java

0
im-logic/im-segment-id/src/main/java/net/sopod/soim/logic/segmentid/mapper/SegmentIdMapper.java → im-service/im-segment-id/src/main/java/net/sopod/soim/logic/segmentid/mapper/SegmentIdMapper.java

0
im-logic/im-segment-id/src/main/java/net/sopod/soim/logic/segmentid/model/entity/SegmentId.java → im-service/im-segment-id/src/main/java/net/sopod/soim/logic/segmentid/model/entity/SegmentId.java

2
im-logic/im-segment-id/src/main/java/net/sopod/soim/logic/segmentid/service/SegmentIdServiceImpl.java → im-service/im-segment-id/src/main/java/net/sopod/soim/logic/segmentid/service/SegmentIdServiceImpl.java

@ -25,7 +25,7 @@ import java.util.concurrent.ThreadLocalRandom;
* @author tmy * @author tmy
* @date 2022-04-02 15:22 * @date 2022-04-02 15:22
*/ */
@DubboService @DubboService//(version = SegmentIdService.Version.v1)
@AllArgsConstructor @AllArgsConstructor
public class SegmentIdServiceImpl implements SegmentIdService { public class SegmentIdServiceImpl implements SegmentIdService {

0
im-logic/im-segment-id/src/main/java/net/sopod/soim/logic/segmentid/util/RedisLockUtil.java → im-service/im-segment-id/src/main/java/net/sopod/soim/logic/segmentid/util/RedisLockUtil.java

0
im-logic/im-segment-id/src/main/resources/application.yml → im-service/im-segment-id/src/main/resources/application.yml

0
im-logic/im-segment-id/src/main/resources/mapper/SegmentIdMapper.xml → im-service/im-segment-id/src/main/resources/mapper/SegmentIdMapper.xml

0
im-logic/im-segment-id/src/test/java/net/sopod/soim/logic/segmentid/test/SegmentIdApplicationTest.java → im-service/im-segment-id/src/test/java/net/sopod/soim/logic/segmentid/test/SegmentIdApplicationTest.java

4
im-logic/pom.xml → im-service/pom.xml

@ -9,9 +9,11 @@
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>im-logic</artifactId> <artifactId>im-service</artifactId>
<packaging>pom</packaging> <packaging>pom</packaging>
<modules> <modules>
<module>im-segment-id</module>
<module>im-router</module>
<module>im-logic-user</module> <module>im-logic-user</module>
</modules> </modules>

12
pom.xml

@ -12,15 +12,12 @@
<module>im-common</module> <module>im-common</module>
<module>im-data</module> <module>im-data</module>
<module>im-entry</module> <module>im-entry</module>
<module>im-logic</module>
<module>im-client</module> <module>im-client</module>
<module>im-logic-api</module>
<module>im-logic-api/im-logic-user-api</module>
<module>im-core</module> <module>im-core</module>
<module>im-das</module> <module>im-das</module>
<module>im-das-api</module> <module>im-das-api</module>
<module>im-logic-api/im-segment-id-api</module> <module>im-service</module>
<module>im-logic/im-segment-id</module> <module>im-service-api</module>
<module>im-entry-http</module> <module>im-entry-http</module>
</modules> </modules>
@ -146,6 +143,11 @@
<artifactId>spring-boot-starter-data-redis</artifactId> <artifactId>spring-boot-starter-data-redis</artifactId>
<version>${spring-boot.version}</version> <version>${spring-boot.version}</version>
</dependency> </dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.11.1</version>
</dependency>
<dependency> <dependency>
<groupId>io.lettuce</groupId> <groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId> <artifactId>lettuce-core</artifactId>

Loading…
Cancel
Save