Browse Source

消息系统

master
zhizhi wu 5 years ago
parent
commit
6d30cc8db2
  1. 6
      ccmq/pom.xml
  2. 34
      ccmq/src/main/java/com/ccsens/ccmq/lowlevel/client/ClientManager.java
  3. 5
      ccmq/src/main/java/com/ccsens/ccmq/lowlevel/client/netty/ChannelManager.java
  4. 5
      ccmq/src/main/java/com/ccsens/ccmq/lowlevel/client/netty/WrapperedChannel.java
  5. 1
      ccmq/src/main/java/com/ccsens/ccmq/lowlevel/client/rabbitmq/RabbitMqListener.java
  6. 3
      ccmq/src/main/java/com/ccsens/ccmq/lowlevel/client/restful/RestManager.java
  7. 36
      ccmq/src/main/java/com/ccsens/ccmq/lowlevel/message/MessageHandler.java
  8. 44
      ccmq/src/main/java/com/ccsens/ccmq/lowlevel/message/api/QueueController.java
  9. 4
      ccmq/src/main/java/com/ccsens/ccmq/lowlevel/message/client/AuthMessage.java
  10. 12
      ccmq/src/main/java/com/ccsens/ccmq/lowlevel/message/common/InMessage.java
  11. 22
      ccmq/src/main/java/com/ccsens/ccmq/lowlevel/message/common/MessageConstant.java
  12. 1
      ccmq/src/main/java/com/ccsens/ccmq/lowlevel/message/common/MessageRule.java
  13. 9
      ccmq/src/main/java/com/ccsens/ccmq/lowlevel/message/common/OutMessage.java
  14. 2
      ccmq/src/main/java/com/ccsens/ccmq/lowlevel/message/common/ServerMessage.java
  15. 10
      ccmq/src/main/java/com/ccsens/ccmq/lowlevel/persist/MessageDao.java
  16. 5
      ccmq/src/main/java/wiki/tall/ccmq/common/TallMessageApplication.java
  17. 8
      ccmq/src/main/java/wiki/tall/ccmq/common/bean/dto/ccmodbus/CCModBusEntity.java
  18. 21
      ccmq/src/main/java/wiki/tall/ccmq/common/config/RabbitMqConfig.java
  19. 6
      ccmq/src/main/java/wiki/tall/ccmq/common/config/SpringConfig.java
  20. 1
      ccmq/src/main/java/wiki/tall/ccmq/common/controller/interceptor/TokenInterceptor.java
  21. 5
      ccmq/src/main/java/wiki/tall/ccmq/common/exception/BaseException.java
  22. 32
      ccmq/src/main/java/wiki/tall/ccmq/common/util/CcMessageUtil.java
  23. 89
      ccmq/src/main/java/wiki/tall/ccmq/common/util/MqUtil.java
  24. 90
      ccmq/src/main/java/wiki/tall/ccmq/common/util/RedisUtil.java
  25. 12
      ccmq/src/main/java/wiki/tall/ccmq/common/util/WebConstant.java
  26. 12
      ccmq/src/main/java/wiki/tall/ccmq/common/util/WechatUtil.java
  27. 6
      ccmq/src/main/resources/application-dev.properties
  28. 3
      ccmq/src/main/resources/application-prod.properties
  29. 6
      ccmq/src/main/resources/application-test.properties
  30. 2
      ccmq/src/main/resources/application.properties
  31. 2
      ccmq/src/main/resources/druid-dev.properties
  32. 2
      ccmq/src/main/resources/druid-test.properties
  33. 2
      ccmq/src/main/resources/setting-dev.properties
  34. 2
      ccmq/src/main/resources/setting-prod.properties
  35. 2
      ccmq/src/main/resources/setting-test.properties
  36. 1
      ccmq/src/test/java/wiki/tall/ccmq/common/FeignTest.java
  37. 18
      ccmq/src/test/java/wiki/tall/ccmq/common/JacksonTest.java

6
ccmq/pom.xml

@ -83,6 +83,12 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<!-- 自动重连-->
<dependency>
<groupId>com.spring4all</groupId>
<artifactId>mongodb-plus-spring-boot-starter</artifactId>
<version>1.0.0.RELEASE</version>
</dependency>
<!-- spring MyBatis -->
<dependency>

34
ccmq/src/main/java/com/ccsens/ccmq/lowlevel/client/ClientManager.java

@ -16,7 +16,10 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import wiki.tall.ccmq.common.exception.BaseException;
import wiki.tall.ccmq.common.util.JacksonUtil;
import wiki.tall.ccmq.common.util.RedisUtil;
import wiki.tall.ccmq.common.util.WebConstant;
import java.util.Iterator;
import java.util.Map;
@ -90,6 +93,9 @@ public class ClientManager {
if (null == inMessage.getRule()) {
inMessage.setRule(MessageRule.defaultRule(inMessage.getFromDomain()));
}
if (inMessage.getRule().getExpireAt() == null) {
inMessage.getRule().setExpireAt(0L);
}
break;
}
case Queue: {
@ -106,6 +112,9 @@ public class ClientManager {
if (null == inMessage.getRule()) {
inMessage.setRule(MessageRule.defaultRule(inMessage.getFromDomain()));
}
if (inMessage.getRule().getExpireAt() == null) {
inMessage.getRule().setExpireAt(0L);
}
break;
}
case Rest: {
@ -122,6 +131,9 @@ public class ClientManager {
if (null == inMessage.getRule()) {
inMessage.setRule(MessageRule.defaultRule(inMessage.getFromDomain()));
}
if (inMessage.getRule().getExpireAt() == null) {
inMessage.getRule().setExpireAt(0L);
}
break;
}
default:
@ -155,7 +167,7 @@ public class ClientManager {
return inMessage;
}
public static void sendMessageToAuthedClient(MessageConstant.DomainType toDomain, String to, OutMessageSet outMessageSet) throws JsonProcessingException {
public static void sendMessageToAuthedClient(MessageConstant.DomainType toDomain, MessageConstant.InvokerMessage invokerMessage, String to, OutMessageSet outMessageSet) throws JsonProcessingException {
switch (toDomain){
case User:
if(StrUtil.isNotEmpty(to)) {
@ -163,26 +175,34 @@ public class ClientManager {
}
break;
case Queue:
QueueManager.sendTo(outMessageSet);
QueueManager.sendTo(invokerMessage.getAddress(), outMessageSet);
break;
case Rest:
RestManager.sendTo(outMessageSet);
// TODO
RestManager.sendTo(invokerMessage, outMessageSet);
break;
default:
break;
}
}
public static void sendServerMessage(MessageConstant.DomainType toDomain, OutMessageSet outMessageSet) throws JsonProcessingException {
public static void sendServerMessage(MessageConstant.DomainType toDomain, MessageConstant.InvokerMessage invokerMessage, OutMessageSet outMessageSet) throws JsonProcessingException {
switch (toDomain){
case User:
ChannelManager.sendTo(ChannelManager.getCurrentChannel(), outMessageSet);
break;
case Queue:
QueueManager.sendTo(outMessageSet);
if (invokerMessage == null || StrUtil.isEmpty(invokerMessage.getAddress())) {
break;
}
if (!RedisUtil.sHas(WebConstant.REDIS_QUEUE, invokerMessage.getAddress())) {
throw new BaseException(MessageConstant.Error.QUEUE_NOT_EXISTED);
}
QueueManager.sendTo(invokerMessage.getAddress(), outMessageSet);
break;
case Rest:
RestManager.sendTo(outMessageSet);
RestManager.sendTo(invokerMessage, outMessageSet);
break;
default:
break;
@ -209,7 +229,7 @@ public class ClientManager {
)
)
);
sendServerMessage(inMessage.getFromDomain(),outMessageSet);
sendServerMessage(inMessage.getFromDomain(), inMessage.getInvokerMessage(), outMessageSet);
}
public static boolean isSenderAuthed(InMessage inMessage) {

5
ccmq/src/main/java/com/ccsens/ccmq/lowlevel/client/netty/ChannelManager.java

@ -82,15 +82,16 @@ public class ChannelManager {
* @param userId 用户ID
* @param major 客户端主版本号
* @param minor 客户端次版本号
* @param message 业务相关参数
*/
public static synchronized void authChannel(Channel channel,String userId,Integer major,Integer minor){
public static synchronized void authChannel(Channel channel,String userId,Integer major,Integer minor, String message){
logger.debug("Invoke authedChannels({},{},{},{})",channel.id().asLongText(),userId,major,minor);
major = major != null ? major : 0;
minor = minor != null ? minor : 0;
WrapperedChannel wrapperedChannel = rawChannels.get(channel);
if(wrapperedChannel != null){
wrapperedChannel.whenAuthed(userId,major,minor);
wrapperedChannel.whenAuthed(userId,major,minor, message);
Set<WrapperedChannel> authedWchannelSet = authedChannels.computeIfAbsent(userId, k -> new HashSet<>());
authedWchannelSet.add(wrapperedChannel);
logger.debug("Authed channel {} with user {}", channel.id().asLongText(), userId);

5
ccmq/src/main/java/com/ccsens/ccmq/lowlevel/client/netty/WrapperedChannel.java

@ -70,6 +70,8 @@ public class WrapperedChannel {
* 发送数据条数(每发送到一条协议加1包括心跳)
*/
private long dataSendCount;
/**业务相关参数*/
private String message;
public WrapperedChannel(Channel channel){
this.channel = channel;
@ -143,10 +145,11 @@ public class WrapperedChannel {
authedAtInSeconds = DateUtil.currentSeconds();
}
public void whenAuthed(String userId,int major,int minor){
public void whenAuthed(String userId,int major,int minor, String message){
whenAuthed();
setVersion(major,minor);
this.userId = userId;
this.message = message;
}
public void writeAndFlush(Object message){

1
ccmq/src/main/java/com/ccsens/ccmq/lowlevel/client/rabbitmq/RabbitMqListener.java

@ -31,6 +31,7 @@ public class RabbitMqListener {
//1.填充缺省字段
ClientManager.fillMessageInfo(inMessage,MessageConstant.DomainType.Queue);
logger.info("赋予默认值后的inMessage:{}", inMessage);
//2.处理消息
MessageHandler.handleMessage(inMessage);

3
ccmq/src/main/java/com/ccsens/ccmq/lowlevel/client/restful/RestManager.java

@ -1,12 +1,13 @@
package com.ccsens.ccmq.lowlevel.client.restful;
import com.ccsens.ccmq.lowlevel.message.common.MessageConstant;
import com.ccsens.ccmq.lowlevel.message.common.OutMessageSet;
/**
* @author __zHangSan
*/
public class RestManager {
public static void sendTo(OutMessageSet outMessageSet){
public static void sendTo(MessageConstant.InvokerMessage invokerMessage, OutMessageSet outMessageSet){
}

36
ccmq/src/main/java/com/ccsens/ccmq/lowlevel/message/MessageHandler.java

@ -4,13 +4,13 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.lang.Console;
import cn.hutool.core.util.StrUtil;
import com.ccsens.ccmq.lowlevel.client.ClientManager;
import com.ccsens.ccmq.lowlevel.client.netty.ChannelManager;
import com.ccsens.ccmq.lowlevel.client.netty.WrapperedChannel;
import com.ccsens.ccmq.lowlevel.client.rabbitmq.QueueManager;
import com.ccsens.ccmq.lowlevel.message.server.*;
import com.ccsens.ccmq.lowlevel.persist.IMessageDao;
import com.ccsens.ccmq.lowlevel.message.client.*;
import com.ccsens.ccmq.lowlevel.message.common.*;
import com.ccsens.ccmq.lowlevel.client.netty.ChannelManager;
import com.ccsens.ccmq.lowlevel.client.netty.WrapperedChannel;
import com.ccsens.ccmq.lowlevel.message.server.*;
import com.ccsens.ccmq.lowlevel.persist.IMessageDao;
import com.ccsens.ccmq.lowlevel.service.IUserService;
import com.fasterxml.jackson.databind.JsonNode;
import org.slf4j.Logger;
@ -21,7 +21,6 @@ import org.springframework.stereotype.Component;
import wiki.tall.ccmq.common.config.SettingProps;
import wiki.tall.ccmq.common.util.*;
import java.nio.channels.Channel;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@ -31,7 +30,7 @@ import java.util.Set;
*/
@Component
public class MessageHandler {
private Logger logger = LoggerFactory.getLogger(MessageHandler.class);
private static Logger logger = LoggerFactory.getLogger(MessageHandler.class);
/**
* 发送消息最大等待ack时间
*/
@ -122,11 +121,19 @@ public class MessageHandler {
MessageConstant.DomainType toDomain = MessageConstant.DomainType.valueOf(stringArray[0]);
String to = stringArray[1];
MessageConstant.InvokerMessage invokerMessage = null;
if (stringArray.length >= 3 && StrUtil.isNotEmpty(stringArray[2]) ) {
invokerMessage = JacksonUtil.jsonToBean(stringArray[2], MessageConstant.InvokerMessage.class);
}
//授权时保存的业务消息
String authBusinessMessage = stringArray.length > 3 ? stringArray[3] : null;
//针对同一用户,在上一次ack还未收到/超时之前,不进行处理
Object lockObj = ResourceLock.getLockObj(ackId);
logger.info("上锁:{}", lockObj);
synchronized (lockObj) {
//查找该用户是否有正在处理的消息
if (RedisUtil.hasKey(RedisKeyManager.getAckSetKey(ackId))) {
logger.info("用户有消息正在处理");
//将当前用户重新放回到待处理列表的最后
RedisUtil.sSet(RedisKeyManager.getPendingClientSetKey(), o);
continue;
@ -135,12 +142,13 @@ public class MessageHandler {
//查找所有没有ack的消息
messageList = getMessageDao().getClientPendingMessage(toDomain, to, MAX_MESSAGE_NUM);
if (CollectionUtil.isEmpty(messageList)) {
logger.info("messageList是空");
continue;
}
//判断用户是否在线
boolean clientOnLine = ClientManager.isUserOnline(toDomain,to);
logger.info("用户是否在线:{}", clientOnLine);
//发送和处理消息
if(clientOnLine){
//发送
@ -149,7 +157,7 @@ public class MessageHandler {
OutMessageSet outMessageSet = OutMessageSet.newInstance();
for(Message message : messageList) {
messageIdSet.add(message.getId());
outMessageSet.add(new OutMessage(message));
outMessageSet.add(new OutMessage(message, authBusinessMessage));
getMessageDao().incrementSendTimes(message.getId(), DateUtil.currentSeconds());
}
RedisUtil.sSetAndTime(RedisKeyManager.getAckSetKey(ackId),REDIS_ACK_EXPIRED_SECONDS,messageIdSet.toArray());
@ -158,7 +166,8 @@ public class MessageHandler {
outMessageSet.ackId(ackId);
//发送给对应的接收者
ClientManager.sendMessageToAuthedClient(toDomain,to,outMessageSet);
logger.info("给{}发送消息:{}", to, outMessageSet);
ClientManager.sendMessageToAuthedClient(toDomain,invokerMessage, to,outMessageSet);
}else{
//不发送,根据规则检查所有“offLineDiscard”的消息设置为failed状态
for(Message message : messageList){
@ -166,6 +175,7 @@ public class MessageHandler {
getMessageDao().updateMessageStatus(message.getId(),MessageConstant.Status.Failed);
}
}
logger.info("没有发送消息");
}
}
ResourceLock.freeLockObj(ackId);
@ -214,6 +224,7 @@ public class MessageHandler {
RedisUtil.sSet(RedisKeyManager.getPendingClientSetKey(),
CcMessageUtil.getNameManglingToList(inMessage).toArray()
);
}
private static void saveMessage(InMessage inMessage) throws Exception{
@ -223,6 +234,7 @@ public class MessageHandler {
//2.按照tos拆分成不同消息
for(String to : inMessage.getTos()){
Message message = new Message(inMessage,to);
logger.info("message redis:" + message);
getMessageDao().saveOrUpdateMessage(message);
}
}
@ -249,7 +261,7 @@ public class MessageHandler {
if(StrUtil.isNotEmpty(inSysData.getData().getToken())) {
String userId = getUserService().getUserIdByToken(inSysData.getData().getToken());
if(StrUtil.isNotEmpty(userId)){
ChannelManager.authChannel(ChannelManager.getCurrentChannel(),userId,inSysData.getData().getMajor(),inSysData.getData().getMinor());
ChannelManager.authChannel(ChannelManager.getCurrentChannel(),userId,inSysData.getData().getMajor(),inSysData.getData().getMinor(), inSysData.getMessage());
onClientOnLine(MessageConstant.DomainType.User,userId);
authSuccess = true;
}
@ -312,6 +324,8 @@ public class MessageHandler {
case SetMsgSuccess: {
boolean setStatusSuccess = false;
SetSuccessStatusMessage inSysData = JacksonUtil.jsonToBean(data, SetSuccessStatusMessage.class);
WrapperedChannel wrapperedChannel = ChannelManager.getWrapperedChannelByChannel(ChannelManager.getCurrentChannel());
inSysData.setMessage(wrapperedChannel.getMessage());
if(null != inSysData.getData() && StrUtil.isNotEmpty(inSysData.getData().getMsgId())){
updateMessageStatus(inSysData.getData().getMsgId(), MessageConstant.Status.Succeed);
setStatusSuccess = true;
@ -394,7 +408,7 @@ public class MessageHandler {
//2.结果应答
if(null != outMessage) {
ClientManager.sendServerMessage(inMessage.getFromDomain(),
ClientManager.sendServerMessage(inMessage.getFromDomain(), inMessage.getInvokerMessage(),
OutMessageSet.newInstance().ackId(null).add(outMessage)
);
}

44
ccmq/src/main/java/com/ccsens/ccmq/lowlevel/message/api/QueueController.java

@ -0,0 +1,44 @@
package com.ccsens.ccmq.lowlevel.message.api;
import cn.hutool.core.util.StrUtil;
import com.ccsens.ccmq.lowlevel.message.common.MessageConstant;
import com.rabbitmq.client.ConnectionFactory;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import wiki.tall.ccmq.common.exception.BaseException;
import wiki.tall.ccmq.common.util.JsonResponse;
import wiki.tall.ccmq.common.util.MqUtil;
import wiki.tall.ccmq.common.util.WebConstant;
import javax.annotation.Resource;
/**
* 消息队列
* @author: whj
* @time: 2020/6/4 14:46
*/
@Api(tags = "消息队列")
@RestController()
@RequestMapping("/queue")
@Slf4j
public class QueueController {
@Resource
private ConnectionFactory connectionFactory;
@ApiOperation(value = "添加消息队列")
@RequestMapping(value = "add", method = {RequestMethod.POST, RequestMethod.GET})
public JsonResponse<MessageConstant> add(String queueName) {
log.info("添加消息队列:{}", queueName);
if (StrUtil.isEmpty(queueName)) {
throw new BaseException(MessageConstant.Error.QUEUE_NAME_EMPTY);
}
WebConstant.QueueAdd queueAdd = MqUtil.initQueue(connectionFactory, queueName);
log.info("消息队列{}添加结果:{}", queueName, queueAdd);
return JsonResponse.newInstance().ok(queueAdd);
}
}

4
ccmq/src/main/java/com/ccsens/ccmq/lowlevel/message/client/AuthMessage.java

@ -16,11 +16,15 @@ public class AuthMessage extends ServerMessage {
@Getter
public static class Data{
private String token;
// 主版本号
private int major;
// 此版本号
private int minor;
}
private Data data;
/**业务相关参数,由业务具体确定是什么类型,什么参数*/
private String message;
public AuthMessage(){
setType(MessageConstant.ClientMessageType.Auth.name());

12
ccmq/src/main/java/com/ccsens/ccmq/lowlevel/message/common/InMessage.java

@ -36,7 +36,16 @@ public class InMessage {
/**
* 消息要发送到哪个域
*/
private MessageConstant.DomainType toDomain;
private MessageConstant.DomainType toDomain = MessageConstant.DomainType.User;
/**
* 调用者信息
* User netty,无需配置
* Queue 配置Queue Name
* Rest : 配置URL发送方式
* Server 无需配置
*/
private MessageConstant.InvokerMessage invokerMessage;
/**
* 接受者信息列表
*/
@ -57,6 +66,7 @@ public class InMessage {
*/
private String data;
public InMessage(){
this.time = DateUtil.currentSeconds();
}

22
ccmq/src/main/java/com/ccsens/ccmq/lowlevel/message/common/MessageConstant.java

@ -1,6 +1,7 @@
package com.ccsens.ccmq.lowlevel.message.common;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
/**
* @author wei
@ -129,7 +130,10 @@ public class MessageConstant {
//认证超时断开连接
ChannelAuthTimeOut(1303,"连接断开:认证超时"),
//不可预期错误
UnExpectedError(1304,"不可预期异常");
UnExpectedError(1304,"不可预期异常"),
QUEUE_NEW_FAIL(1305, "队列创建失败"),
QUEUE_NAME_EMPTY(1306, "不予许消息队列名称为空"),
QUEUE_NOT_EXISTED(1307, "不予许消息队列名称为空");
public int code;
public String text;
@ -180,6 +184,21 @@ public class MessageConstant {
}
}
/**
* 被调用者信息
*/
@Data
public static class InvokerMessage{
/**地址,ws不必设置,mq为Queue name, rest为url*/
private String address;
/**发送方式,get请求...,主要用于rest类型*/
private SendMethod method;
}
public enum SendMethod{
GET, POST, POST_JSON;
}
public enum Status{
//未决状态(未完成)
Pending(0),
@ -214,4 +233,5 @@ public class MessageConstant {
return null;
}
}
}

1
ccmq/src/main/java/com/ccsens/ccmq/lowlevel/message/common/MessageRule.java

@ -57,6 +57,7 @@ public class MessageRule {
this.expireAt = expireAt;
}
public static MessageRule defaultRule(MessageConstant.DomainType fromDomain) {
MessageRule messageRule = null;
switch(fromDomain) {

9
ccmq/src/main/java/com/ccsens/ccmq/lowlevel/message/common/OutMessage.java

@ -31,6 +31,9 @@ public class OutMessage {
*/
private String data;
/**授权时保存的业务相关的字符串*/
private String authMessage;
public OutMessage(){
}
@ -68,4 +71,10 @@ public class OutMessage {
this.from = message.getFrom();
this.data = message.getData();
}
public OutMessage(Message message, String authBusinessMessage){
this(message);
this.authMessage = authBusinessMessage;
}
}

2
ccmq/src/main/java/com/ccsens/ccmq/lowlevel/message/common/ServerMessage.java

@ -8,4 +8,6 @@ import lombok.Data;
@Data
public class ServerMessage {
private String type;
/**授权时存储的业务相关参数*/
private String message;
}

10
ccmq/src/main/java/com/ccsens/ccmq/lowlevel/persist/MessageDao.java

@ -155,11 +155,11 @@ public class MessageDao implements IMessageDao {
private Query clientPendingMessageQuery(MessageConstant.DomainType toDomain, String to){
return new Query().addCriteria(Criteria.where("toDomain").is(toDomain))
.addCriteria(Criteria.where("to").is(to))
//状态为pending
.addCriteria(Criteria.where("status").is(MessageConstant.Status.Pending))
.addCriteria(new Criteria().andOperator(
//未过期消息
.addCriteria(Criteria.where("to").is(to))
//状态为pending
.addCriteria(Criteria.where("status").is(MessageConstant.Status.Pending))
.addCriteria(new Criteria().andOperator(
//未过期消息
new Criteria().orOperator(
Criteria.where("rule.expireAt").is(0),
Criteria.where("rule.expireAt").gt(DateUtil.currentSeconds()

5
ccmq/src/main/java/wiki/tall/ccmq/common/TallMessageApplication.java

@ -4,8 +4,7 @@ import com.ccsens.ccmq.lowlevel.client.netty.tcphexserver.NettyMBServer;
import com.ccsens.ccmq.lowlevel.client.netty.tcptextserver.NettyTextServer;
import com.ccsens.ccmq.lowlevel.client.netty.wsserver.NettyWsServer;
import com.ccsens.ccmq.lowlevel.message.MessageHandler;
import wiki.tall.ccmq.common.util.WebConstant;
import com.spring4all.mongodb.EnableMongoPlus;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
@ -15,6 +14,7 @@ import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import wiki.tall.ccmq.common.util.WebConstant;
import java.io.File;
@ -27,6 +27,7 @@ import java.io.File;
@EnableScheduling
@EnableAsync
@SpringBootApplication
@EnableMongoPlus
//@EnableDiscoveryClient
//@EnableFeignClients(basePackages = "com.ccsens.feignclient")
//@EnableCircuitBreaker

8
ccmq/src/main/java/wiki/tall/ccmq/common/bean/dto/ccmodbus/CCModBusEntity.java

@ -129,15 +129,9 @@ public class CCModBusEntity {
public void print(){
filter = getFilter();
System.out.printf("%02x %02x ",filter[0],filter[1]);
System.out.printf("%02x %02x %02x ",getLen(),getAddr(),getOper());
originData = getOriginData();
for(int i=0;i<originData.length;i++){
System.out.printf("%02x ",originData[i]);
}
crc = getCrc();
System.out.printf("%02x %02x ",crc[0],crc[1]);
System.out.println();
}
public Error valid(){

21
ccmq/src/main/java/wiki/tall/ccmq/common/config/RabbitMqConfig.java

@ -1,9 +1,13 @@
package wiki.tall.ccmq.common.config;
import com.rabbitmq.client.ConnectionFactory;
import org.springframework.amqp.core.Queue;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import wiki.tall.ccmq.common.util.MqUtil;
import javax.annotation.Resource;
/**
* @author wei
@ -12,6 +16,8 @@ import org.springframework.context.annotation.Configuration;
public class RabbitMqConfig {
@Autowired
private SettingProps settingProps;
@Resource
private ConnectionFactory connectionFactory;
@Bean
public Queue receivedQueue(){
@ -22,4 +28,19 @@ public class RabbitMqConfig {
public Queue sendQueue(){
return new Queue(settingProps.getMq().getOutName());
}
@Bean
public String[] addBusinessQueue(){
String[] queueNames = MqUtil.initAllQueue(connectionFactory);
return queueNames;
}
@Bean
/**
* 初始化非默认的消息队列
*/
public String[] initQueue(){
return null;
}
}

6
ccmq/src/main/java/wiki/tall/ccmq/common/config/SpringConfig.java

@ -3,6 +3,7 @@ package wiki.tall.ccmq.common.config;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.IdUtil;
import com.rabbitmq.client.ConnectionFactory;
import wiki.tall.ccmq.common.controller.interceptor.TokenInterceptor;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
@ -32,6 +33,11 @@ public class SpringConfig implements WebMvcConfigurer {
@Autowired
private SettingProps settingProps;
@Bean
public ConnectionFactory getConnectionFactory(){
return new ConnectionFactory();
}
/**
* 配置Converter
* @return

1
ccmq/src/main/java/wiki/tall/ccmq/common/controller/interceptor/TokenInterceptor.java

@ -16,7 +16,6 @@ import javax.servlet.http.HttpServletResponse;
public class TokenInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
System.out.println("TokenInterceptor-->preHandle");
// 验证token是否存在
final String authHeader = httpServletRequest.getHeader(WebConstant.HEADER_KEY_TOKEN);
if (authHeader == null || !authHeader.startsWith(WebConstant.HEADER_KEY_TOKEN_PREFIX)) {

5
ccmq/src/main/java/wiki/tall/ccmq/common/exception/BaseException.java

@ -1,5 +1,6 @@
package wiki.tall.ccmq.common.exception;
import com.ccsens.ccmq.lowlevel.message.common.MessageConstant;
import lombok.Getter;
@Getter
@ -14,4 +15,8 @@ public class BaseException extends RuntimeException {
super(message);
this.code = code;
}
public BaseException(MessageConstant.Error error) {
this(error.code, error.text);
}
}

32
ccmq/src/main/java/wiki/tall/ccmq/common/util/CcMessageUtil.java

@ -1,8 +1,10 @@
package wiki.tall.ccmq.common.util;
import cn.hutool.core.util.StrUtil;
import com.ccsens.ccmq.lowlevel.client.netty.ChannelManager;
import com.ccsens.ccmq.lowlevel.message.common.InMessage;
import com.ccsens.ccmq.lowlevel.message.common.MessageConstant;
import com.fasterxml.jackson.core.JsonProcessingException;
import java.util.ArrayList;
import java.util.List;
@ -19,20 +21,36 @@ public class CcMessageUtil {
* @param inMessage 消息
* @return tos命名矫正后的集合
*/
public static List<Object> getNameManglingToList(InMessage inMessage) {
public static List<Object> getNameManglingToList(InMessage inMessage) throws JsonProcessingException {
List<Object> list = new ArrayList<Object>(inMessage.getTos().size());
String message = null;
switch (inMessage.getFromDomain()) {
case User:
message = ChannelManager.getWrapperedChannelByChannel(ChannelManager.getCurrentChannel()).getMessage();
break;
default:
break;
}
for(String to : inMessage.getTos()){
list.add(StrUtil.format("{}{}{}",inMessage.getToDomain(),TYPE_TO_JOIN_CHAR,to));
list.add(StrUtil.format("{}{}{}{}{}{}{}",
inMessage.getToDomain(),TYPE_TO_JOIN_CHAR,to,
TYPE_TO_JOIN_CHAR,
inMessage.getInvokerMessage() == null ? "{}" : JacksonUtil.beanToJson(inMessage.getInvokerMessage()),
TYPE_TO_JOIN_CHAR, message
));
}
return list;
}
public static String[] splitTypeAndUserId(String typeAndUserId) {
String []strings = new String[2];
int splitCharPos = typeAndUserId.indexOf(TYPE_TO_JOIN_CHAR);
strings[0] = typeAndUserId.substring(0,splitCharPos);
strings[1] = typeAndUserId.substring(splitCharPos+1,typeAndUserId.length());
return strings;
// String []strings = new String[3];
// int splitCharPos = typeAndUserId.indexOf(TYPE_TO_JOIN_CHAR);
// strings[0] = typeAndUserId.substring(0,splitCharPos);
// strings[1] = typeAndUserId.substring(splitCharPos+1,typeAndUserId.length());
// return strings;
return typeAndUserId.split(String.valueOf(TYPE_TO_JOIN_CHAR));
}
public static String getDomainTypeAndUserIdString(MessageConstant.DomainType domainType,String to){

89
ccmq/src/main/java/wiki/tall/ccmq/common/util/MqUtil.java

@ -0,0 +1,89 @@
package wiki.tall.ccmq.common.util;
import cn.hutool.core.collection.CollectionUtil;
import com.ccsens.ccmq.lowlevel.message.common.MessageConstant;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import wiki.tall.ccmq.common.exception.BaseException;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeoutException;
/**
* @description:
* @author: whj
* @time: 2020/6/4 10:46
*/
@Slf4j
@Component
public class MqUtil {
/**
* 初始化某个消息队列
* @param connectionFactory
* @param queueName
* @return 0失败 1成功 2已存在
*/
public static WebConstant.QueueAdd initQueue(ConnectionFactory connectionFactory, String queueName) {
log.info("创建队列:{}", queueName);
if (RedisUtil.sHas(WebConstant.REDIS_QUEUE, queueName)) {
log.info("队列已在缓存中存在");
return WebConstant.QueueAdd.EXISTED;
}
Channel channel;
try {
channel = connectionFactory.newConnection().createChannel();
} catch (Exception e) {
log.error("创建mq链接异常:{}", e);
return WebConstant.QueueAdd.FAIL;
}
try {
channel.queueDeclarePassive(queueName);
log.info("{}已存在", queueName);
RedisUtil.sSet(WebConstant.REDIS_QUEUE, queueName);
return WebConstant.QueueAdd.EXISTED;
} catch (IOException e) {
log.info("创建队列:{}", queueName);
try {
connectionFactory.newConnection().createChannel().queueDeclare(queueName, true, false, false, null);
} catch (Exception ex) {
ex.printStackTrace();
log.error("创建队列时出现异常", e);
return WebConstant.QueueAdd.FAIL;
}
}
return WebConstant.QueueAdd.SUCCESS;
}
/**
* 将缓存中的队列全部初始化
* @return
*/
public static String[] initAllQueue(ConnectionFactory connectionFactory){
Set<Object> queueNames = RedisUtil.sGet(WebConstant.REDIS_QUEUE);
if (CollectionUtil.isEmpty(queueNames)) {
log.info("没有需要创建的队列");
return null;
}
queueNames.forEach(obj -> {
String queueName = (String)obj;
WebConstant.QueueAdd queueAdd = initQueue(connectionFactory, queueName);
if (queueAdd == WebConstant.QueueAdd.FAIL) {
throw new BaseException(MessageConstant.Error.QUEUE_NEW_FAIL);
}
});
return (String[])queueNames.toArray();
}
}

90
ccmq/src/main/java/wiki/tall/ccmq/common/util/RedisUtil.java

@ -2,7 +2,10 @@ package wiki.tall.ccmq.common.util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.PostConstruct;
import java.util.List;
import java.util.Map;
import java.util.Set;
@ -11,12 +14,19 @@ import java.util.concurrent.TimeUnit;
/**
* @author __zHangSan
*/
@Component
public class RedisUtil {
public static RedisTemplate<String,Object> getRedisTemplate(){
return SpringContextUtils.getBean("redisTemplate",RedisTemplate.class);
}
@Autowired
private RedisTemplate<String, Object> redisTemplate;
private static RedisUtil util;
@PostConstruct
public void init(){
util = this;
util.redisTemplate = this.redisTemplate;
}
/**
* 指定缓存失效时间
*
@ -27,7 +37,7 @@ public class RedisUtil {
public static boolean expire(String key, long time) {
try {
if (time > 0) {
getRedisTemplate().expire(key, time, TimeUnit.SECONDS);
util.redisTemplate.expire(key, time, TimeUnit.SECONDS);
}
return true;
} catch (Exception e) {
@ -43,7 +53,7 @@ public class RedisUtil {
* @return 时间() 返回0代表为永久有效
*/
public static long getExpire(String key) {
return getRedisTemplate().getExpire(key, TimeUnit.SECONDS);
return util.redisTemplate.getExpire(key, TimeUnit.SECONDS);
}
/**
@ -54,7 +64,7 @@ public class RedisUtil {
*/
public static boolean hasKey(String key) {
try {
return getRedisTemplate().hasKey(key);
return util.redisTemplate.hasKey(key);
} catch (Exception e) {
e.printStackTrace();
return false;
@ -70,9 +80,9 @@ public class RedisUtil {
public static void del(String... keys) {
if (keys != null && keys.length > 0) {
if (keys.length == 1) {
getRedisTemplate().delete(keys[0]);
util.redisTemplate.delete(keys[0]);
} else {
getRedisTemplate().delete(CollectionUtils.arrayToList(keys));
util.redisTemplate.delete(CollectionUtils.arrayToList(keys));
}
}
}
@ -85,7 +95,7 @@ public class RedisUtil {
* @return
*/
public static Object get(String key) {
return key == null ? null : getRedisTemplate().opsForValue().get(key);
return key == null ? null : util.redisTemplate.opsForValue().get(key);
}
/**
@ -97,7 +107,7 @@ public class RedisUtil {
*/
public static boolean set(String key, Object value) {
try {
getRedisTemplate().opsForValue().set(key, value);
util.redisTemplate.opsForValue().set(key, value);
return true;
} catch (Exception e) {
e.printStackTrace();
@ -117,7 +127,7 @@ public class RedisUtil {
public static boolean set(String key, Object value, long seconds) {
try {
if (seconds > 0) {
getRedisTemplate().opsForValue().set(key, value, seconds, TimeUnit.SECONDS);
util.redisTemplate.opsForValue().set(key, value, seconds, TimeUnit.SECONDS);
} else {
set(key, value);
}
@ -139,7 +149,7 @@ public class RedisUtil {
if (delta < 0) {
throw new RuntimeException("递增因子必须大于0");
}
return getRedisTemplate().opsForValue().increment(key, delta);
return util.redisTemplate.opsForValue().increment(key, delta);
}
/**
@ -153,7 +163,7 @@ public class RedisUtil {
if (delta < 0) {
throw new RuntimeException("递减因子必须大于0");
}
return getRedisTemplate().opsForValue().increment(key, -delta);
return util.redisTemplate.opsForValue().increment(key, -delta);
}
//================================Map=================================
@ -165,7 +175,7 @@ public class RedisUtil {
* @return
*/
public static Object hget(String key, String item) {
return getRedisTemplate().opsForHash().get(key, item);
return util.redisTemplate.opsForHash().get(key, item);
}
/**
@ -175,7 +185,7 @@ public class RedisUtil {
* @return 对应的多个键值
*/
public static Map<Object, Object> hmget(String key) {
return getRedisTemplate().opsForHash().entries(key);
return util.redisTemplate.opsForHash().entries(key);
}
/**
@ -187,7 +197,7 @@ public class RedisUtil {
*/
public static boolean hmset(String key, Map<String, Object> map) {
try {
getRedisTemplate().opsForHash().putAll(key, map);
util.redisTemplate.opsForHash().putAll(key, map);
return true;
} catch (Exception e) {
e.printStackTrace();
@ -205,7 +215,7 @@ public class RedisUtil {
*/
public static boolean hmset(String key, Map<String, Object> map, long time) {
try {
getRedisTemplate().opsForHash().putAll(key, map);
util.redisTemplate.opsForHash().putAll(key, map);
if (time > 0) {
expire(key, time);
}
@ -226,7 +236,7 @@ public class RedisUtil {
*/
public static boolean hset(String key, String item, Object value) {
try {
getRedisTemplate().opsForHash().put(key, item, value);
util.redisTemplate.opsForHash().put(key, item, value);
return true;
} catch (Exception e) {
e.printStackTrace();
@ -245,7 +255,7 @@ public class RedisUtil {
*/
public static boolean hset(String key, String item, Object value, long time) {
try {
getRedisTemplate().opsForHash().put(key, item, value);
util.redisTemplate.opsForHash().put(key, item, value);
if (time > 0) {
expire(key, time);
}
@ -263,7 +273,7 @@ public class RedisUtil {
* @param item 可以使多个 不能为null
*/
public static void hdel(String key, Object... item) {
getRedisTemplate().opsForHash().delete(key, item);
util.redisTemplate.opsForHash().delete(key, item);
}
/**
@ -274,7 +284,7 @@ public class RedisUtil {
* @return true 存在 false不存在
*/
public static boolean hHasKey(String key, String item) {
return getRedisTemplate().opsForHash().hasKey(key, item);
return util.redisTemplate.opsForHash().hasKey(key, item);
}
/**
@ -286,7 +296,7 @@ public class RedisUtil {
* @return
*/
public static double hincr(String key, String item, double by) {
return getRedisTemplate().opsForHash().increment(key, item, by);
return util.redisTemplate.opsForHash().increment(key, item, by);
}
/**
@ -298,7 +308,7 @@ public class RedisUtil {
* @return
*/
public static double hdecr(String key, String item, double by) {
return getRedisTemplate().opsForHash().increment(key, item, -by);
return util.redisTemplate.opsForHash().increment(key, item, -by);
}
//============================set=============================
@ -311,7 +321,7 @@ public class RedisUtil {
*/
public static boolean sHas(String key, Object value) {
try {
return getRedisTemplate().opsForSet().isMember(key, value);
return util.redisTemplate.opsForSet().isMember(key, value);
} catch (Exception e) {
e.printStackTrace();
return false;
@ -326,7 +336,7 @@ public class RedisUtil {
*/
public static Set<Object> sGet(String key) {
try {
return getRedisTemplate().opsForSet().members(key);
return util.redisTemplate.opsForSet().members(key);
} catch (Exception e) {
e.printStackTrace();
return null;
@ -341,7 +351,7 @@ public class RedisUtil {
*/
public static long sSet(String key, Object... values) {
try {
return getRedisTemplate().opsForSet().add(key, values);
return util.redisTemplate.opsForSet().add(key, values);
} catch (Exception e) {
e.printStackTrace();
return 0;
@ -358,7 +368,7 @@ public class RedisUtil {
*/
public static long sSetAndTime(String key, long time, Object... values) {
try {
Long count = getRedisTemplate().opsForSet().add(key, values);
Long count = util.redisTemplate.opsForSet().add(key, values);
if (time > 0) {expire(key, time);}
return count;
} catch (Exception e) {
@ -375,7 +385,7 @@ public class RedisUtil {
*/
public static long sGetSetSize(String key) {
try {
return getRedisTemplate().opsForSet().size(key);
return util.redisTemplate.opsForSet().size(key);
} catch (Exception e) {
e.printStackTrace();
return 0;
@ -391,7 +401,7 @@ public class RedisUtil {
*/
public static long setRemove(String key, Object... values) {
try {
Long count = getRedisTemplate().opsForSet().remove(key, values);
Long count = util.redisTemplate.opsForSet().remove(key, values);
return count;
} catch (Exception e) {
e.printStackTrace();
@ -407,7 +417,7 @@ public class RedisUtil {
*/
public static Object sPop(String key) {
try {
return getRedisTemplate().opsForSet().pop(key);
return util.redisTemplate.opsForSet().pop(key);
}catch (Exception e){
e.printStackTrace();
return null;
@ -425,7 +435,7 @@ public class RedisUtil {
*/
public static List<Object> lGet(String key, long start, long end) {
try {
return getRedisTemplate().opsForList().range(key, start, end);
return util.redisTemplate.opsForList().range(key, start, end);
} catch (Exception e) {
e.printStackTrace();
return null;
@ -440,7 +450,7 @@ public class RedisUtil {
*/
public static long lGetListSize(String key) {
try {
return getRedisTemplate().opsForList().size(key);
return util.redisTemplate.opsForList().size(key);
} catch (Exception e) {
e.printStackTrace();
return 0;
@ -456,7 +466,7 @@ public class RedisUtil {
*/
public static Object lGetIndex(String key, long index) {
try {
return getRedisTemplate().opsForList().index(key, index);
return util.redisTemplate.opsForList().index(key, index);
} catch (Exception e) {
e.printStackTrace();
return null;
@ -472,7 +482,7 @@ public class RedisUtil {
*/
public static boolean lSet(String key, Object value) {
try {
getRedisTemplate().opsForList().rightPush(key, value);
util.redisTemplate.opsForList().rightPush(key, value);
return true;
} catch (Exception e) {
e.printStackTrace();
@ -490,7 +500,7 @@ public class RedisUtil {
*/
public static boolean lSet(String key, Object value, long seconds) {
try {
getRedisTemplate().opsForList().rightPush(key, value);
util.redisTemplate.opsForList().rightPush(key, value);
if (seconds > 0) {
expire(key, seconds);
}
@ -510,7 +520,7 @@ public class RedisUtil {
*/
public static boolean lSet(String key, List<Object> value) {
try {
getRedisTemplate().opsForList().rightPushAll(key, value);
util.redisTemplate.opsForList().rightPushAll(key, value);
return true;
} catch (Exception e) {
e.printStackTrace();
@ -528,7 +538,7 @@ public class RedisUtil {
*/
public static boolean lSet(String key, List<Object> value, long time) {
try {
getRedisTemplate().opsForList().rightPushAll(key, value);
util.redisTemplate.opsForList().rightPushAll(key, value);
if (time > 0) {
expire(key, time);
}
@ -549,7 +559,7 @@ public class RedisUtil {
*/
public static boolean lUpdateIndex(String key, long index, Object value) {
try {
getRedisTemplate().opsForList().set(key, index, value);
util.redisTemplate.opsForList().set(key, index, value);
return true;
} catch (Exception e) {
e.printStackTrace();
@ -567,7 +577,7 @@ public class RedisUtil {
*/
public static long lRemove(String key, long count, Object value) {
try {
Long remove = getRedisTemplate().opsForList().remove(key, count, value);
Long remove = util.redisTemplate.opsForList().remove(key, count, value);
return remove;
} catch (Exception e) {
e.printStackTrace();
@ -582,7 +592,7 @@ public class RedisUtil {
*/
public static Object lPop(String key) {
try {
Object value = getRedisTemplate().opsForList().leftPop(key);
Object value = util.redisTemplate.opsForList().leftPop(key);
return value;
} catch (Exception e) {
e.printStackTrace();

12
ccmq/src/main/java/wiki/tall/ccmq/common/util/WebConstant.java

@ -39,6 +39,18 @@ public class WebConstant {
public static final String UPLOAD_PATH_BASE = "/home/mtpro/uploads";
public static final String UPLOAD_PATH_DELIVER = UPLOAD_PATH_BASE + File.separator + "delivers";
/**消息队列的queue name 对应的key*/
public static final String REDIS_QUEUE = "message_queue";
public enum QueueAdd{
FAIL(0,"失败"),SUCCESS(1,"成功"), EXISTED(2, "已存在");
public int value;
public String phase;
QueueAdd(int value,String thePhase){
this.value =value;
this.phase = thePhase;
}
}
public enum NETTY_SERVER_TYPE{
WebSocket(0,"WebSocket"),TCP_TEXT(1,"TCP_TEXT"),TCP_MB(2,"TCP_MB");

12
ccmq/src/main/java/wiki/tall/ccmq/common/util/WechatUtil.java

@ -200,7 +200,6 @@ public class WechatUtil {
wechatCode.scene = scene;
String postStr = JacksonUtil.beanToJson(wechatCode);
System.out.println(postStr);
HttpsUtil.httpsRequest(url,"POST",postStr,path);
}
@ -241,12 +240,6 @@ public class WechatUtil {
String reqrXml = JacksonUtil.beanToXml(preparePayBean,"xml");
String respXml = HttpsUtil.httpsRequest(URL_PREPARE_PAY,"POST",reqrXml);
System.out.println("---------------PreparePay Request Xml-----------------");
System.out.println(reqrXml);
System.out.println("---------------PreparePay Response Xml-----------------");
System.out.println(respXml);
System.out.println("---------------PreparePay end-----------------");
PreparePayResultBean resultBean = null;
PreparePayReSignBean reSignBean = new PreparePayReSignBean();
resultBean = JacksonUtil.xmlToBean(new ByteArrayInputStream(respXml.getBytes()),PreparePayResultBean.class);
@ -391,11 +384,6 @@ public class WechatUtil {
String reqrXml = JacksonUtil.mapToXml(reqMap,"xml");
String respXml = HttpsUtil.httpsRequest(URL_PAY_TO_USR_WX,"POST",reqrXml,
WebConstant.PATH_WX_CRET,mchid);
System.out.println("---------------PayToUsrWx Request Xml-----------------");
System.out.println(reqrXml);
System.out.println("---------------PayToUsrWx Response Xml-----------------");
System.out.println(respXml);
System.out.println("---------------PayToUsrWx end-----------------");
//3.判断成功失败
Map<String,Object> respMap = JacksonUtil.xmlToMap(new ByteArrayInputStream(respXml.getBytes()));

6
ccmq/src/main/resources/application-dev.properties

@ -20,7 +20,8 @@ spring.redis.jedis.pool.max-idle=10
spring.redis.jedis.pool.min-idle=0
# RabbitMQ配置信息
spring.rabbitmq.host=49.233.89.188
#spring.rabbitmq.host=49.233.89.188
spring.rabbitmq.host=192.168.0.99
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=111111
@ -28,6 +29,7 @@ spring.rabbitmq.password=111111
# MongoDB配置信息
spring.data.mongodb.uri=mongodb://wei:111111@49.233.89.188:27017/test
spring.data.mongodb.option.socket-timeout=5000
spring.data.mongodb.option.max-connection-idle-time=10000

3
ccmq/src/main/resources/application-prod.properties

@ -30,7 +30,8 @@ spring.rabbitmq.password=111111
# MongoDB配置信息
spring.data.mongodb.uri=mongodb://wei:111111@api.ccsens.com:27017/test
spring.data.mongodb.option.socket-timeout=5000
spring.data.mongodb.option.max-connection-idle-time=10000
# Settings
setting.snowflake.workerId = 1
setting.snowflake.datacenterId = 1

6
ccmq/src/main/resources/application-test.properties

@ -19,7 +19,8 @@ spring.redis.jedis.pool.max-idle=10
spring.redis.jedis.pool.min-idle=0
# RabbitMQ配置信息
spring.rabbitmq.host=49.233.89.188
#spring.rabbitmq.host=api.ccsens.com
spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=111111
@ -27,6 +28,9 @@ spring.rabbitmq.password=111111
# MongoDB配置信息
spring.data.mongodb.uri=mongodb://wei:111111@49.233.89.188:27017/test
spring.data.mongodb.option.socket-keep-alive=true
spring.data.mongodb.option.socket-timeout=5000
spring.data.mongodb.option.max-connection-idle-time=10000
# Settings
setting.snowflake.workerId=1

2
ccmq/src/main/resources/application.properties

@ -1,5 +1,5 @@
# 选择开发环境{dev|test|prod}
spring.profiles.active=dev
spring.profiles.active=test
# 设置应用名
spring.application.name=tall-message

2
ccmq/src/main/resources/druid-dev.properties

@ -3,7 +3,7 @@ spring.datasource.druid.dynamicUrl=jdbc:mysql://localhost:3306/${schema}
#spring.datasource.druid.url=jdbc:mysql://127.0.0.1:3306/db_encryptmoneypacket?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
#spring.datasource.druid.username=root
#spring.datasource.druid.password=111111
spring.datasource.druid.url=jdbc:mysql://api.ccsens.com/ptpro?useUnicode=true&characterEncoding=UTF-8
spring.datasource.druid.url=jdbc:mysql://49.233.89.188/ptpro?useUnicode=true&characterEncoding=UTF-8
spring.datasource.druid.username=root
spring.datasource.druid.password=68073a279b399baa1fa12cf39bfbb65bfc1480ffee7b659ccc81cf19be8c4473
spring.datasource.druid.driverClassName=com.mysql.jdbc.Driver

2
ccmq/src/main/resources/druid-test.properties

@ -3,7 +3,7 @@ spring.datasource.druid.dynamicUrl=jdbc:mysql://localhost:3306/${schema}
#spring.datasource.druid.url=jdbc:mysql://127.0.0.1:3306/db_encryptmoneypacket?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
#spring.datasource.druid.username=root
#spring.datasource.druid.password=111111
spring.datasource.druid.url=jdbc:mysql://api.ccsens.com/ptpro?useUnicode=true&characterEncoding=UTF-8
spring.datasource.druid.url=jdbc:mysql://49.233.89.188/ptpro?useUnicode=true&characterEncoding=UTF-8
spring.datasource.druid.username=root
spring.datasource.druid.password=po3OynBO[M3579p6L7)o
spring.datasource.druid.driverClassName=com.mysql.jdbc.Driver

2
ccmq/src/main/resources/setting-dev.properties

@ -17,7 +17,7 @@ setting.keepAlive.maxIdleSeconds = 40
## Netty Server Setting
setting.netty.ws.port = 8196
setting.netty.ws.uri = /message/v3.0/ws
setting.netty.ws.uri = /message/v4.0/ws
setting.netty.ws.type = netty_ws
setting.netty.tcptext.port = 8199

2
ccmq/src/main/resources/setting-prod.properties

@ -17,7 +17,7 @@ setting.keepAlive.maxIdleSeconds = 40
## Netty Server Setting
setting.netty.ws.port = 8196
setting.netty.ws.uri = /message/v3.0/ws
setting.netty.ws.uri = /message/v4.0/ws
setting.netty.ws.type = netty_ws
setting.netty.tcptext.port = 8199

2
ccmq/src/main/resources/setting-test.properties

@ -17,7 +17,7 @@ setting.keepAlive.maxIdleSeconds = 40
## Netty Server Setting
setting.netty.ws.port = 8196
setting.netty.ws.uri = /message/v3.0/ws
setting.netty.ws.uri = /message/v4.0/ws
setting.netty.ws.type = netty_ws
setting.netty.tcptext.port = 8199

1
ccmq/src/test/java/wiki/tall/ccmq/common/FeignTest.java

@ -17,6 +17,5 @@ public class FeignTest {
public void test1(){
String userId = userService.getUserIdByToken(
"eyJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE1NzY1NDg1ODcsInN1YiI6IjExNzU5NTQ1MjAxOTk1MzI1NDQiLCJhdXRoSWQiOiIxMTc3MTU4ODQ4ODg1MTY2MDgwIiwiZXhwIjoxNTc2NjM0OTg3fQ.fHGocfvzF8CBxcpx-LPqVdeD-SccGYeJdqNGss6ZogM");
System.out.println(userId);
}
}

18
ccmq/src/test/java/wiki/tall/ccmq/common/JacksonTest.java

@ -59,19 +59,14 @@ public class JacksonTest {
"}";
JsonNode tmpNode, node = objectMapper.readTree(json);
System.out.println("voName:" + node.get("voName").textValue());
System.out.println("pers: " + node.get("pers").toString());
System.out.println("age: " + node.get("age").toString());
JsonNode persNode = node.get("pers");
if (persNode.isArray()) {
for (int i = 0; i < persNode.size(); i++) {
tmpNode = persNode.get(i);
System.out.println(tmpNode.get("name"));
JsonNode childNode = tmpNode.get("childs");
if(!childNode.isNull() && childNode.isArray()){
for(int j=0;j<childNode.size();j++){
tmpNode = childNode.get(j);
System.out.println("\t" + tmpNode.get("name"));
}
}
}
@ -125,23 +120,16 @@ public class JacksonTest {
List<MessageTestEntity> entities = CollectionUtil.newArrayList(messageTestEntity1, messageTestEntity2, messageTestEntity3);
json = JacksonUtil.beanToJson(messageTestEntity1);
System.out.println(json);
jsonList = JacksonUtil.beanToJson(entities,true);
System.out.println(json);
messageTestEntity = JacksonUtil.jsonToBean(json, MessageTestEntity.class);
System.out.println(messageTestEntity);
entities = JacksonUtil.jsonToBean(jsonList, MessageTestEntity.class,true);
for(MessageTestEntity tmp : entities) {
System.out.println(tmp);
}
entities = JacksonUtil.jsonToBean(json, MessageTestEntity.class,false);
for(MessageTestEntity tmp : entities) {
System.out.println(tmp);
}
}
@ -150,7 +138,6 @@ public class JacksonTest {
for(int i=0;i<level;i++){
System.out.print("-");
}
System.out.println(entry.getKey() + " ---> " + entry.getValue() + "(" + entry.getValue().getClass().getSimpleName() + ")");
if(entry.getValue() instanceof Map){
printMap((Map<String,Object>)entry.getValue(),level+1);
}
@ -167,20 +154,15 @@ public class JacksonTest {
List<MessageTestEntity> entities = CollectionUtil.newArrayList(messageTestEntity1, messageTestEntity2, messageTestEntity3);
json = JacksonUtil.beanToJson(messageTestEntity1);
System.out.println(json);
jsonList = JacksonUtil.beanToJson(entities,true);
System.out.println(json);
Map<String,Object> map = JacksonUtil.jsonToMap(json);
System.out.println(map);
printMap(map,0);
json = JacksonUtil.mapToJson(map,true);
System.out.println(json);
json = JacksonUtil.mapToJson(map);
System.out.println(json);
}
@Test

Loading…
Cancel
Save