Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
Y
yzg-util
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
YZG
yzg-util
Commits
3b68d2b3
Commit
3b68d2b3
authored
Mar 18, 2021
by
yanzg
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改公式和计算帮助类
parent
d4e7f8f0
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
286 additions
and
124 deletions
+286
-124
TimeUnit.java
...il-mq/src/main/java/com/yanzuoguang/mq/plan/TimeUnit.java
+16
-0
YzgMqConsumer.java
.../src/main/java/com/yanzuoguang/mq/plan/YzgMqConsumer.java
+26
-109
YzgMqProcedure.java
...src/main/java/com/yanzuoguang/mq/plan/YzgMqProcedure.java
+173
-0
MessageServiceImpl.java
...a/com/yanzuoguang/mq/service/impl/MessageServiceImpl.java
+6
-9
MqServiceImpl.java
...n/java/com/yanzuoguang/mq/service/impl/MqServiceImpl.java
+4
-3
MessagePlan.java
...l-mq/src/main/java/com/yanzuoguang/mq/vo/MessagePlan.java
+58
-0
MessageVo.java
...til-mq/src/main/java/com/yanzuoguang/mq/vo/MessageVo.java
+3
-3
No files found.
yzg-util-mq/src/main/java/com/yanzuoguang/mq/plan/TimeUnit.java
0 → 100644
View file @
3b68d2b3
package
com
.
yanzuoguang
.
mq
.
plan
;
/**
* 时间单位
*
* @author 颜佐光
*/
public
class
TimeUnit
{
public
String
tag
;
public
long
unit
;
public
TimeUnit
(
String
tag
,
long
unit
)
{
this
.
tag
=
tag
;
this
.
unit
=
unit
;
}
}
yzg-util-mq/src/main/java/com/yanzuoguang/mq/plan/YzgMqConsumer.java
View file @
3b68d2b3
...
...
@@ -2,12 +2,11 @@ package com.yanzuoguang.mq.plan;
import
com.rabbitmq.client.Channel
;
import
com.yanzuoguang.mq.service.MqService
;
import
com.yanzuoguang.mq.vo.MessagePlan
;
import
com.yanzuoguang.mq.vo.MessageVo
;
import
com.yanzuoguang.mq.vo.QueueVo
;
import
com.yanzuoguang.mq.vo.req.RegisterServerTokenReqVo
;
import
com.yanzuoguang.util.exception.CodeException
;
import
com.yanzuoguang.util.helper.JsonHelper
;
import
com.yanzuoguang.util.helper.StringHelper
;
import
com.yanzuoguang.util.log.Log
;
import
org.springframework.amqp.core.Message
;
import
org.springframework.amqp.rabbit.annotation.RabbitListener
;
...
...
@@ -15,9 +14,6 @@ import org.springframework.beans.factory.InitializingBean;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* 评论模块消息队列处理
*
...
...
@@ -26,47 +22,11 @@ import java.util.Map;
@Component
public
class
YzgMqConsumer
implements
InitializingBean
{
private
static
class
TimeUnit
{
public
String
tag
;
public
long
unit
;
public
TimeUnit
(
String
tag
,
long
unit
)
{
this
.
tag
=
tag
;
this
.
unit
=
unit
;
}
}
/**
* 延迟队列
*/
public
static
final
String
YZG_MQ_SYSTEM_QUEUE_DELAY
=
"YZG_MQ_SYSTEM_QUEUE_DELAY"
;
/**
* 默认100天延迟
*/
public
static
final
TimeUnit
[]
YZG_MQ_SYSTEM_QUEUE_DELAY_TIME
=
new
TimeUnit
[]{
new
TimeUnit
(
"MillSecond"
,
1
),
new
TimeUnit
(
"Second"
,
1000
),
new
TimeUnit
(
"Minute"
,
1000
*
60
),
new
TimeUnit
(
"Hour"
,
1000
*
60
*
60
),
new
TimeUnit
(
"Day"
,
1000
*
60
*
60
*
24
),
new
TimeUnit
(
"Year"
,
1000
*
60
*
60
*
24
*
365
)
};
/**
* 执行的消息队列
*/
public
static
final
String
YZG_MQ_SYSTEM_QUEUE
=
"YZG_MQ_SYSTEM_QUEUE"
;
/**
* 执行的消息队列
*/
public
static
final
String
YZG_MQ_CLEAR_TOKEN_QUEUE
=
"YZG_MQ_CLEAR_TOKEN_QUEUE"
;
/**
* MQ服务
*/
@Autowired
private
MqService
mqService
;
private
Map
<
String
,
Boolean
>
cacheQueueName
=
new
HashMap
<>();
@Autowired
private
YzgMqProcedure
yzgMqProcedure
;
/**
* Invoked by a BeanFactory after it has set all bean properties supplied
...
...
@@ -80,7 +40,6 @@ public class YzgMqConsumer implements InitializingBean {
*/
@Override
public
void
afterPropertiesSet
()
throws
Exception
{
mqService
.
createQueue
(
new
QueueVo
(
YZG_MQ_SYSTEM_QUEUE
));
}
/**
...
...
@@ -90,70 +49,48 @@ public class YzgMqConsumer implements InitializingBean {
* @param message
* @param channel
*/
@RabbitListener
(
queues
=
{
YZG_MQ_SYSTEM_QUEUE
},
concurrency
=
"10"
)
@RabbitListener
(
queues
=
{
Y
zgMqProcedure
.
Y
ZG_MQ_SYSTEM_QUEUE
},
concurrency
=
"10"
)
public
void
yzgMqSystemQueue
(
String
json
,
Message
message
,
Channel
channel
)
{
MessageVo
req
=
null
;
try
{
MessageVo
req
=
JsonHelper
.
deserialize
(
json
,
MessageVo
.
class
);
req
=
JsonHelper
.
deserialize
(
json
,
MessageVo
.
class
);
mqService
.
message
(
req
,
true
);
}
catch
(
CodeException
ex
)
{
Log
.
error
(
YzgMqConsumer
.
class
,
ex
);
}
catch
(
Exception
ex
)
{
Log
.
error
(
YzgMqConsumer
.
class
,
ex
);
// 等待100ms再次执行
sendDelay
(
json
,
100
);
yzgMqProcedure
.
sendDelay
(
req
,
100
);
}
finally
{
mqService
.
basicAck
(
message
,
channel
);
}
}
/**
* 发送延迟队列
*
* @param req
* @return
*/
public
String
sendDelay
(
MessageVo
req
)
{
String
json
=
JsonHelper
.
serialize
(
req
);
return
sendDelay
(
json
,
req
.
getDedTime
());
}
/**
*
发送延迟队列
*
MQ回调
*
* @param json
* @return
* @param message
* @param channel
*/
public
String
sendDelay
(
String
json
,
long
dedTime
)
{
if
(
dedTime
>
0
)
{
TimeUnit
timeUnit
=
YZG_MQ_SYSTEM_QUEUE_DELAY_TIME
[
0
];
for
(
int
i
=
YZG_MQ_SYSTEM_QUEUE_DELAY_TIME
.
length
-
1
;
i
>=
0
;
i
--)
{
timeUnit
=
YZG_MQ_SYSTEM_QUEUE_DELAY_TIME
[
i
];
if
(
dedTime
>=
timeUnit
.
unit
)
{
break
;
}
}
long
count
=
StringHelper
.
getPage
(
dedTime
,
timeUnit
.
unit
);
String
mqName
=
StringHelper
.
getId
(
YzgMqConsumer
.
YZG_MQ_SYSTEM_QUEUE_DELAY
,
timeUnit
.
tag
,
count
);
boolean
is
=
StringHelper
.
toBoolean
(
cacheQueueName
.
get
(
mqName
));
if
(!
is
)
{
synchronized
(
cacheQueueName
)
{
is
=
StringHelper
.
toBoolean
(
cacheQueueName
.
get
(
mqName
));
if
(!
is
)
{
QueueVo
queueVo
=
new
QueueVo
(
mqName
,
count
*
timeUnit
.
unit
,
YzgMqConsumer
.
YZG_MQ_SYSTEM_QUEUE
);
queueVo
.
check
();
mqService
.
createQueue
(
queueVo
);
cacheQueueName
.
put
(
mqName
,
true
);
}
}
}
return
mqService
.
message
(
new
MessageVo
(
mqName
,
json
,
dedTime
));
}
else
{
return
mqService
.
message
(
new
MessageVo
(
YZG_MQ_SYSTEM_QUEUE
,
YZG_MQ_SYSTEM_QUEUE
,
json
));
@RabbitListener
(
queues
=
{
YzgMqProcedure
.
YZG_MQ_SYSTEM_QUEUE_PLAN
},
concurrency
=
"10"
)
public
void
yzgMqSystemQueuePlan
(
String
json
,
Message
message
,
Channel
channel
)
{
MessagePlan
req
=
null
;
try
{
req
=
JsonHelper
.
deserialize
(
json
,
MessagePlan
.
class
);
yzgMqProcedure
.
sendDelay
(
req
);
}
catch
(
CodeException
ex
)
{
Log
.
error
(
YzgMqConsumer
.
class
,
ex
);
}
catch
(
Exception
ex
)
{
Log
.
error
(
YzgMqConsumer
.
class
,
ex
);
// 等待100ms再次执行
yzgMqProcedure
.
sendDelay
(
req
,
100
);
}
finally
{
mqService
.
basicAck
(
message
,
channel
);
}
}
/**
* 删除token回调
*
...
...
@@ -161,7 +98,7 @@ public class YzgMqConsumer implements InitializingBean {
* @param message
* @param channel
*/
@RabbitListener
(
queues
=
{
YZG_MQ_CLEAR_TOKEN_QUEUE
})
@RabbitListener
(
queues
=
{
Y
zgMqProcedure
.
Y
ZG_MQ_CLEAR_TOKEN_QUEUE
})
public
void
yzgMqClearTokenQueue
(
String
json
,
Message
message
,
Channel
channel
)
{
try
{
RegisterServerTokenReqVo
req
=
JsonHelper
.
deserialize
(
json
,
RegisterServerTokenReqVo
.
class
);
...
...
@@ -171,29 +108,9 @@ public class YzgMqConsumer implements InitializingBean {
}
catch
(
Exception
ex
)
{
Log
.
error
(
YzgMqConsumer
.
class
,
ex
);
// 等待100ms再次执行
sendRemove
(
json
,
100
);
yzgMqProcedure
.
sendRemove
(
json
,
100
);
}
finally
{
mqService
.
basicAck
(
message
,
channel
);
}
}
/**
* 定时删除token
*
* @param req
* @return
*/
public
String
sendRemove
(
RegisterServerTokenReqVo
req
)
{
return
this
.
sendRemove
(
JsonHelper
.
serialize
(
req
),
req
.
getFairTime
());
}
/**
* 定时删除token
*
* @param json
* @return
*/
public
String
sendRemove
(
String
json
,
long
dedTime
)
{
return
mqService
.
message
(
new
MessageVo
(
YZG_MQ_CLEAR_TOKEN_QUEUE
,
YZG_MQ_CLEAR_TOKEN_QUEUE
,
json
,
dedTime
));
}
}
yzg-util-mq/src/main/java/com/yanzuoguang/mq/plan/YzgMqProcedure.java
0 → 100644
View file @
3b68d2b3
package
com
.
yanzuoguang
.
mq
.
plan
;
import
com.yanzuoguang.mq.service.MqService
;
import
com.yanzuoguang.mq.vo.MessagePlan
;
import
com.yanzuoguang.mq.vo.MessageVo
;
import
com.yanzuoguang.mq.vo.QueueVo
;
import
com.yanzuoguang.mq.vo.req.RegisterServerTokenReqVo
;
import
com.yanzuoguang.util.helper.JsonHelper
;
import
com.yanzuoguang.util.helper.StringHelper
;
import
org.springframework.beans.factory.InitializingBean
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
/**
* 评论模块消息队列处理
*
* @author 颜佐光
*/
@Component
public
class
YzgMqProcedure
implements
InitializingBean
{
/**
* 执行的消息队列
*/
public
static
final
String
YZG_MQ_SYSTEM_QUEUE
=
"YZG_MQ_SYSTEM_QUEUE"
;
/**
* 延迟队列
*/
public
static
final
String
YZG_MQ_SYSTEM_QUEUE_PLAN
=
"YZG_MQ_SYSTEM_QUEUE_PLAN"
;
/**
* 默认100天延迟
*/
public
static
final
TimeUnit
[]
YZG_MQ_SYSTEM_QUEUE_PLAN_TIME
=
new
TimeUnit
[]{
new
TimeUnit
(
"Second"
,
1000
),
new
TimeUnit
(
"Minute"
,
1000
*
60
),
new
TimeUnit
(
"Hour"
,
1000
*
60
*
60
)
};
/**
* 执行的消息队列
*/
public
static
final
String
YZG_MQ_CLEAR_TOKEN_QUEUE
=
"YZG_MQ_CLEAR_TOKEN_QUEUE"
;
/**
* MQ服务
*/
@Autowired
private
MqService
mqService
;
/**
* Invoked by a BeanFactory after it has set all bean properties supplied
* (and satisfied BeanFactoryAware and ApplicationContextAware).
* <p>This method allows the bean instance to perform initialization only
* possible when all bean properties have been set and to throw an
* exception in the event of misconfiguration.
*
* @throws Exception in the event of misconfiguration (such
* as failure to set an essential property) or if initialization fails.
*/
@Override
public
void
afterPropertiesSet
()
throws
Exception
{
mqService
.
createQueue
(
new
QueueVo
(
YZG_MQ_SYSTEM_QUEUE
));
mqService
.
createQueue
(
new
QueueVo
(
YZG_MQ_SYSTEM_QUEUE_PLAN
));
for
(
TimeUnit
item
:
YZG_MQ_SYSTEM_QUEUE_PLAN_TIME
)
{
mqService
.
createQueue
(
new
QueueVo
(
getQueueName
(
item
),
item
.
unit
,
YZG_MQ_SYSTEM_QUEUE_PLAN
));
}
}
/**
* 获取队列名称
*
* @param item
* @return
*/
private
String
getQueueName
(
TimeUnit
item
)
{
return
String
.
format
(
"%s:%s"
,
YZG_MQ_SYSTEM_QUEUE_PLAN
,
item
.
tag
);
}
/**
* 获取等待时间单位
*
* @param waitTime
* @return
*/
private
TimeUnit
getTimeUnit
(
long
waitTime
)
{
TimeUnit
timeUnit
=
YZG_MQ_SYSTEM_QUEUE_PLAN_TIME
[
0
];
for
(
int
i
=
YZG_MQ_SYSTEM_QUEUE_PLAN_TIME
.
length
-
1
;
i
>=
0
;
i
--)
{
timeUnit
=
YZG_MQ_SYSTEM_QUEUE_PLAN_TIME
[
i
];
if
(
waitTime
>=
timeUnit
.
unit
)
{
break
;
}
}
return
timeUnit
;
}
/**
* 发送延迟队列
*
* @param req
* @return
*/
public
String
sendDelay
(
MessagePlan
req
)
{
return
this
.
sendDelay
(
req
,
0
);
}
/**
* 发送延迟
*
* @param req 请求数据
* @param newDedTime 重写时间
* @return
*/
public
String
sendDelay
(
MessagePlan
req
,
long
newDedTime
)
{
if
(
req
==
null
||
req
.
getMessage
()
==
null
)
{
return
StringHelper
.
EMPTY
;
}
// 设置重新开始计算时间
if
(
newDedTime
>
0
)
{
req
.
setStart
(
System
.
currentTimeMillis
());
req
.
getMessage
().
setDedTime
(
newDedTime
);
}
// 新的时间
long
waitTime
=
req
.
getWaitTime
();
MessageVo
message
=
req
.
getMessage
();
if
(
waitTime
>
0
)
{
TimeUnit
timeUnit
=
getTimeUnit
(
waitTime
);
long
dedTime
=
Math
.
min
(
timeUnit
.
unit
,
waitTime
);
String
queueName
=
getQueueName
(
timeUnit
);
String
json
=
JsonHelper
.
serialize
(
req
);
message
=
new
MessageVo
(
queueName
,
json
,
dedTime
);
}
else
{
message
.
setDedTime
(
0
);
}
return
mqService
.
message
(
message
,
true
);
}
/**
* 发送延迟队列
*
* @param req
* @return
*/
public
String
sendDelay
(
MessageVo
req
)
{
return
sendDelay
(
req
,
0
);
}
/**
* 发送延迟队列
*
* @param req
* @return
*/
public
String
sendDelay
(
MessageVo
req
,
long
newDedTime
)
{
return
sendDelay
(
new
MessagePlan
(
req
),
newDedTime
);
}
/**
* 定时删除token
*
* @param req
* @return
*/
public
String
sendRemove
(
RegisterServerTokenReqVo
req
)
{
return
this
.
sendRemove
(
JsonHelper
.
serialize
(
req
),
req
.
getFairTime
());
}
/**
* 定时删除token
*
* @param json
* @return
*/
public
String
sendRemove
(
String
json
,
long
dedTime
)
{
return
mqService
.
message
(
new
MessageVo
(
YZG_MQ_CLEAR_TOKEN_QUEUE
,
YZG_MQ_CLEAR_TOKEN_QUEUE
,
json
,
dedTime
));
}
}
yzg-util-mq/src/main/java/com/yanzuoguang/mq/service/impl/MessageServiceImpl.java
View file @
3b68d2b3
...
...
@@ -2,7 +2,7 @@ package com.yanzuoguang.mq.service.impl;
import
com.yanzuoguang.mq.base.MyRabbitTemplate
;
import
com.yanzuoguang.mq.dao.MessageDao
;
import
com.yanzuoguang.mq.plan.YzgMq
Consumer
;
import
com.yanzuoguang.mq.plan.YzgMq
Procedure
;
import
com.yanzuoguang.mq.service.MessageService
;
import
com.yanzuoguang.mq.vo.MessageVo
;
import
com.yanzuoguang.util.helper.DateHelper
;
...
...
@@ -39,7 +39,7 @@ public class MessageServiceImpl implements MessageService {
private
MyRabbitTemplate
rabbitTemplate
;
@Autowired
private
YzgMq
Consumer
yzgMqConsumer
;
private
YzgMq
Procedure
yzgMqProcedure
;
/**
* 打上批次
...
...
@@ -94,13 +94,10 @@ public class MessageServiceImpl implements MessageService {
* @return
*/
private
String
sendContent
(
String
messageId
,
MessageVo
req
,
boolean
now
)
{
if
(!
req
.
getExchangeName
().
startsWith
(
YzgMqConsumer
.
YZG_MQ_SYSTEM_QUEUE_DELAY
)
&&
!
req
.
getExchangeName
().
startsWith
(
YzgMqConsumer
.
YZG_MQ_SYSTEM_QUEUE
))
{
if
(
req
.
getDedTime
()
>
0
&&
!
now
)
{
// 延迟队列处理
req
.
setMessageId
(
messageId
);
return
yzgMqConsumer
.
sendDelay
(
req
);
}
return
yzgMqProcedure
.
sendDelay
(
req
);
}
messageId
=
StringHelper
.
getFirst
(
messageId
,
StringHelper
.
getId
(
"temp"
,
StringHelper
.
getNewID
()));
...
...
yzg-util-mq/src/main/java/com/yanzuoguang/mq/service/impl/MqServiceImpl.java
View file @
3b68d2b3
...
...
@@ -6,6 +6,7 @@ import com.yanzuoguang.mq.base.MqConsumeDynamic;
import
com.yanzuoguang.mq.dao.QueueServerDao
;
import
com.yanzuoguang.mq.dao.QueueServerTokenDao
;
import
com.yanzuoguang.mq.plan.YzgMqConsumer
;
import
com.yanzuoguang.mq.plan.YzgMqProcedure
;
import
com.yanzuoguang.mq.service.MessageService
;
import
com.yanzuoguang.mq.service.MqService
;
import
com.yanzuoguang.mq.service.QueueService
;
...
...
@@ -57,7 +58,7 @@ public class MqServiceImpl implements MqService, InitializingBean {
private
QueueServerTokenDao
queueServerTokenDao
;
@Autowired
private
YzgMq
Consumer
yzgMqConsumer
;
private
YzgMq
Procedure
yzgMqProcedure
;
private
String
localName
=
""
;
...
...
@@ -80,7 +81,7 @@ public class MqServiceImpl implements MqService, InitializingBean {
}
this
.
localName
=
UrlHelper
.
getIp
();
QueueVo
removeToken
=
new
QueueVo
(
YzgMq
Consumer
.
YZG_MQ_CLEAR_TOKEN_QUEUE
);
QueueVo
removeToken
=
new
QueueVo
(
YzgMq
Procedure
.
YZG_MQ_CLEAR_TOKEN_QUEUE
);
removeToken
.
check
();
queueService
.
create
(
removeToken
);
...
...
@@ -283,7 +284,7 @@ public class MqServiceImpl implements MqService, InitializingBean {
queueServerTokenDao
.
update
(
serverTokenVo
);
}
if
(
req
.
getFairTime
()
>
0
)
{
yzgMq
Consumer
.
sendRemove
(
req
);
yzgMq
Procedure
.
sendRemove
(
req
);
}
return
serverTokenVo
.
getServerTokenId
();
}
...
...
yzg-util-mq/src/main/java/com/yanzuoguang/mq/vo/MessagePlan.java
0 → 100644
View file @
3b68d2b3
package
com
.
yanzuoguang
.
mq
.
vo
;
import
com.yanzuoguang.util.vo.BaseVo
;
/**
* 消息计划
*
* @author 颜佐光
*/
public
class
MessagePlan
extends
BaseVo
{
/**
* 开始时间
*/
private
long
start
;
/**
* 消息
*/
private
MessageVo
message
;
public
MessagePlan
()
{
this
.
start
=
System
.
currentTimeMillis
();
}
public
MessagePlan
(
MessageVo
message
)
{
this
();
this
.
message
=
message
;
}
public
MessagePlan
(
long
start
,
MessageVo
message
)
{
this
.
start
=
start
;
this
.
message
=
message
;
}
public
long
getStart
()
{
return
start
;
}
public
void
setStart
(
long
start
)
{
this
.
start
=
start
;
}
public
long
getWaitTime
()
{
if
(
this
.
message
==
null
)
{
return
0
;
}
long
time
=
System
.
currentTimeMillis
()
-
this
.
getStart
();
return
this
.
message
.
getDedTime
()
-
time
;
}
public
MessageVo
getMessage
()
{
return
message
;
}
public
void
setMessage
(
MessageVo
message
)
{
this
.
message
=
message
;
}
}
yzg-util-mq/src/main/java/com/yanzuoguang/mq/vo/MessageVo.java
View file @
3b68d2b3
...
...
@@ -38,7 +38,7 @@ public class MessageVo extends BaseVo implements InitDao {
/**
* 延迟毫秒
*/
private
int
dedTime
;
private
long
dedTime
;
/**
* 处理次数
...
...
@@ -174,11 +174,11 @@ public class MessageVo extends BaseVo implements InitDao {
this
.
message
=
message
;
}
public
int
getDedTime
()
{
public
long
getDedTime
()
{
return
dedTime
;
}
public
void
setDedTime
(
int
dedTime
)
{
public
void
setDedTime
(
long
dedTime
)
{
this
.
dedTime
=
dedTime
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment