提交 64f95be3 编写于 作者: 街头小贩's avatar 街头小贩

将Letter相关的事件改为RedisQ

上级 f52d8933
......@@ -54,8 +54,6 @@ public class BoardModeratorServiceImpl implements BoardModeratorService{
private BoardModeratorDao boardModeratorDao;
@Autowired
private BoardModeratorRoleHistoryDao boardModeratorRoleHistoryDao;
//@Autowired
//private ForumEventPublisher forumEventPublisher;
@Autowired @Qualifier("moderatorBornProducer")
private MessageProducer<ModeratorBornEvent> moderatorBornProducer;
@Autowired @Qualifier("moderatorRecallProducer")
......@@ -153,7 +151,6 @@ public class BoardModeratorServiceImpl implements BoardModeratorService{
//版主权限
try{
boardModeratorDao.deleteModerator(removeHis);
//forumEventPublisher.buildModeratorRecallEvent(new ModeratorRecallEvent(this, removeHis, updateRole));
moderatorRecallProducer.create(new ModeratorRecallEvent(removeHis, updateRole)).submit();
return Optional.of(true);
}catch(Exception e){
......@@ -250,7 +247,6 @@ public class BoardModeratorServiceImpl implements BoardModeratorService{
try{
Optional<BoardModerator> data = boardModeratorDao.pushModerator(moderator, memberRoleHistory);
if(data.isPresent()){
//forumEventPublisher.buildModeratorBornEvent(new ModeratorBornEvent(this, moderator, member, memberRoleHistory));
moderatorBornProducer.create(new ModeratorBornEvent(moderator, member, memberRoleHistory)).submit();
}
return data;
......
......@@ -64,8 +64,6 @@ public class BoardServiceImpl implements BoardService{
private BoardConfigDao boardConfigDao;
@Autowired
private BoardActionCollectionDao boardActionCollectionDao;
//@Autowired
//private ForumEventPublisher forumEventPublisher;
@Autowired @Qualifier("boardCreateProducer")
private MessageProducer<BoardCreateEvent> boardCreateProducer;
private final static Logger logger = LoggerFactory.getLogger(BoardServiceImpl.class);
......@@ -162,7 +160,6 @@ public class BoardServiceImpl implements BoardService{
try {
boardDao.save(board);
if (board.getId() > 0) {
//forumEventPublisher.publishBoardEvent(new BoardCreateEvent(this, board));
boardCreateProducer.create(new BoardCreateEvent(board)).submit();
return Optional.of(board);
}
......@@ -182,8 +179,7 @@ public class BoardServiceImpl implements BoardService{
@ActionDescriptor(action=ForumActionEnum.BOARD_FAVORITE)
@Override
public Optional<Boolean> favorite(long id, ActionEventCulpritor culpritor)throws IllegalStateException { //ASP-B4 | 20200709
boolean isFavorited = isFavorited(id, culpritor.getMemberId());
if (!isFavorited) {
if (!isFavorited(id, culpritor.getMemberId())) {
throw new IllegalStateException("收藏记录已经存在");
}
//更新版块统计的fac
......@@ -237,7 +233,6 @@ public class BoardServiceImpl implements BoardService{
try {
boardDao.save(board);
if (board.getId() > 0) {
//forumEventPublisher.publishBoardEvent(new BoardCreateEvent(this, board, BoardConfig.originConfig(board.getId())));
boardCreateProducer.create(new BoardCreateEvent(board, BoardConfig.originConfig(board.getId()))).submit();
return board.getId();
}
......
......@@ -42,8 +42,6 @@ public class PostsMoodRecordsServiceImpl implements PostsMoodRecordsService{
private PostsMoodRecordsDao postsMoodRecordsDao;
@Autowired
private PostsDao postsDao;
//@Autowired
//private ForumEventPublisher forumEventPublisher;
@Autowired @Qualifier("postsMoodProducer")
private MessageProducer<PostsMoodEvent> postsMoodProducer;
private final static Logger logger = LoggerFactory.getLogger(PostsMoodRecordsServiceImpl.class);
......@@ -93,7 +91,6 @@ public class PostsMoodRecordsServiceImpl implements PostsMoodRecordsService{
try {
postsMoodRecordsDao.save(pmr);
if (pmr.getId() > 0) {
//forumEventPublisher.publishPostsLikeEvent(new PostsMoodEvent(this, pmr));
postsMoodProducer.create(new PostsMoodEvent(pmr)).submit();
return pmr.getId();
}
......
......@@ -51,8 +51,6 @@ public class PostsServiceImpl implements PostsService{
private TopicDao topicDao;
@Autowired
private MemberService memberService;
//@Autowired
//private ForumEventPublisher forumEventPublisher;
@Autowired @Qualifier("postsPublishProducer")
private MessageProducer<PostsPublishEvent> postsPublishProducer;
private final static Logger logger = LoggerFactory.getLogger(PostsServiceImpl.class);
......@@ -72,7 +70,6 @@ public class PostsServiceImpl implements PostsService{
Posts posts = new Posts(encodePostsContent, culpritor.getMemberId(), culpritor.getMemberNickname(), topicId, boardGroupId, boardId, -1, culpritor.getIpAddr());
postsDao.save(posts);
if (posts.getId() > 0) {
//forumEventPublisher.publishPostsEvent(new PostsPublishEvent(this, posts, culpritor.getUserAgent()));
postsPublishProducer.create(new PostsPublishEvent(posts, culpritor.getUserAgent())).submit();
return posts.getId();
}
......
......@@ -106,8 +106,6 @@ public class TopicServiceImpl implements TopicService{
private TopicTagDao topicTagDao;
@Autowired
private TopicCategoryDao topicCategoryDao;
//@Autowired
//private ForumEventPublisher forumEventPublisher;
@Autowired @Qualifier("topicPublishProducer")
private MessageProducer<TopicPublishEvent> topicPublishProducer;
@Autowired @Qualifier("topicMoveProducer")
......@@ -223,9 +221,6 @@ public class TopicServiceImpl implements TopicService{
//原版块话题-1,新版块话题+1
//原版块回复-d.successValue,新版块回复+d.successValue
boardStatsDao.balanceTopicPosts(targetBoardId, boardId, affect); //1话题的内容
//if (data.isSuccess()) {
//forumEventPublisher.publishMoveTopicEvent(new TopicMoveEvent(this, topic, topic.getBoard(), targetBoardObj, culpritor.getMemberNickname()));
//}
topicMoveProducer.create(new TopicMoveEvent(topic, topic.getBoard(), targetBoardObj, culpritor.getMemberNickname())).submit();
return Optional.of(true);
}
......@@ -398,10 +393,8 @@ public class TopicServiceImpl implements TopicService{
// 最后一步
Optional<TopicReplica> tr = storeReplicaTopic(pt, oneFloorPosts, null, null, config, culpritor.getUserAgent());
// 发布事件
//final Object eventTarget = this;
final ForumActionEnum action = topicBuildPlug.getAction();
tr.ifPresent((TopicReplica tr1) -> {
//forumEventPublisher.publishPlugTopicEvent(new PlugTopicPublishEvent(eventTarget, tr1, action, culpritor));
Topic t = tr1.toEventPayload();
plugTopicPublishProducer.create(new PlugTopicPublishEvent(t, tr1.getConfigure(), tr1.getContent().getId(), action, culpritor));
});
......@@ -432,9 +425,7 @@ public class TopicServiceImpl implements TopicService{
// 最后一步
Optional<TopicReplica> tr = storeReplicaTopic(pt, oneFloorPosts, null, null, config, culpritor.getUserAgent());
// 发布事件
// final Object eventTarget = this;
tr.ifPresent((TopicReplica tr1) -> {
//forumEventPublisher.publishPlugTopicEvent(new PlugTopicPublishEvent(eventTarget, tr1, action, culpritor));
Topic t = tr1.toEventPayload();
plugTopicPublishProducer.create(new PlugTopicPublishEvent(t, tr1.getConfigure(), tr1.getContent().getId(), action, culpritor)).submit();
});
......@@ -476,8 +467,7 @@ public class TopicServiceImpl implements TopicService{
@Override
public Optional<Boolean> like(long id, ActionEventCulpritor culpritor)throws IllegalStateException { //ASP-T3 | 20200709
//不能重复点赞
boolean isLiked = isLiked(id, culpritor.getMemberId());
if (!isLiked) {
if (!isLiked(id, culpritor.getMemberId())) {
throw new IllegalStateException("已经点过赞了");
}
return topicStatsDao.plusLikes(id, culpritor.getMemberId());
......@@ -503,8 +493,7 @@ public class TopicServiceImpl implements TopicService{
@Override
public Optional<Boolean> favorite(long id, ActionEventCulpritor culpritor)throws IllegalStateException{ //ASP-T8 | 20200709
//更新话题的收藏统计|重复收藏
boolean isFavorited = isFavorited(id, culpritor.getMemberId());
if (!isFavorited) {
if (!isFavorited(id, culpritor.getMemberId())) {
throw new IllegalStateException("收藏记录已经存在");
}
return topicStatsDao.plusFavorites(id, culpritor.getMemberId());
......@@ -923,7 +912,6 @@ public class TopicServiceImpl implements TopicService{
}
// 话题发布事件方法
private void generalTopicEvent(TopicReplica tr){
//forumEventPublisher.publishTopicEvent(new TopicPublishEvent(this, tr, tr.getUserAgent()));
Topic t = tr.toEventPayload();
topicPublishProducer.create(new TopicPublishEvent(t, tr.getConfigure(), tr.getStats(), tr.getTages(), tr.getUserAgent())).submit();
}
......
package com.apobates.forum.letterbox.impl;
import com.apobates.forum.letterbox.impl.event.ForumLetterPostEvent;
import com.apobates.forum.letterbox.impl.event.ForumLetterPostInboxListener;
import com.github.davidmarquis.redisq.RedisMessageQueue;
import com.github.davidmarquis.redisq.consumer.MessageConsumer;
import com.github.davidmarquis.redisq.producer.DefaultMessageProducer;
import com.github.davidmarquis.redisq.producer.MessageProducer;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.context.annotation.Configuration;
......@@ -12,5 +20,29 @@ import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan(basePackages={"com.apobates.forum.letterbox.impl"}, useDefaultFilters=false, includeFilters={@Filter(classes={org.springframework.stereotype.Service.class}),@Filter(classes={org.springframework.stereotype.Repository.class}),@Filter(classes={org.springframework.stereotype.Component.class})})
public class LetterAppConfig {
// loop queue
@Bean("letterPostEventQueue")
public RedisMessageQueue letterPostEventQueue(){
RedisMessageQueue mq = new com.github.davidmarquis.redisq.RedisMessageQueue();
mq.setQueueName("letter:PostEvent");
return mq;
}
// loop Producer
@Bean("letterPostEventProducer")
public MessageProducer<ForumLetterPostEvent> letterPostEventProducer(@Qualifier("letterPostEventQueue") RedisMessageQueue letterPostEventQueue){
DefaultMessageProducer<ForumLetterPostEvent> dmq = new com.github.davidmarquis.redisq.producer.DefaultMessageProducer<>();
dmq.setQueue(letterPostEventQueue);
return dmq;
}
// loop consumer
@Bean
public MessageConsumer<ForumLetterPostEvent> letterdeliverConsumer(
@Qualifier("letterPostEventQueue") RedisMessageQueue letterPostEventQueue,
@Qualifier("letterdeliver") ForumLetterPostInboxListener letterdeliver){
MessageConsumer<ForumLetterPostEvent> messageConsumer = new com.github.davidmarquis.redisq.consumer.MessageConsumer<>();
messageConsumer.setQueue(letterPostEventQueue);
messageConsumer.setConsumerId("ForumLetterPostEvent:deliver");
messageConsumer.setMessageListener(letterdeliver);
return messageConsumer;
}
}
package com.apobates.forum.letterbox.impl.event;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Component;
/**
* 信件模块事件发布器
* @author xiaofanku
* @since 20200527
*/
@Component
public class ForumLetterEventPublisher {
@Autowired
private ApplicationEventPublisher applicationEventPublisher;
/**
* 发布信件创建事件
* @param letterPostEvent
*/
public void publishPostsEvent(ForumLetterPostEvent letterPostEvent) {
applicationEventPublisher.publishEvent(letterPostEvent);
}
}
\ No newline at end of file
package com.apobates.forum.letterbox.impl.event;
import com.apobates.forum.letterbox.entity.proxy.ForumLetterReplica;
import org.springframework.context.ApplicationEvent;
import com.apobates.forum.letterbox.entity.ForumLetter;
import com.apobates.forum.letterbox.entity.ForumLetterReceiver;
import java.util.Set;
/**
* 信件创建事件
......@@ -9,16 +10,21 @@ import org.springframework.context.ApplicationEvent;
* @author xiaofanku
* @since 20200527
*/
public class ForumLetterPostEvent extends ApplicationEvent {
public class ForumLetterPostEvent {
private static final long serialVersionUID = -4875399186422889558L;
private final ForumLetterReplica letter;
public ForumLetterPostEvent(Object source, ForumLetterReplica letter) {
super(source);
private final ForumLetter letter;
private final Set<ForumLetterReceiver> receivers;
public ForumLetterPostEvent(ForumLetter letter, Set<ForumLetterReceiver> receivers) {
this.letter = letter;
this.receivers = receivers;
}
public ForumLetterReplica getLetter() {
public ForumLetter getLetter() {
return letter;
}
public Set<ForumLetterReceiver> getReceivers() {
return receivers;
}
}
\ No newline at end of file
package com.apobates.forum.letterbox.impl.event;
import com.apobates.forum.letterbox.dao.InboxDao;
import com.apobates.forum.letterbox.entity.ForumLetter;
import com.apobates.forum.letterbox.entity.ForumLetterReceiver;
import com.apobates.forum.letterbox.entity.Inbox;
import com.apobates.forum.letterbox.entity.proxy.ForumLetterReplica;
import java.util.Set;
import java.util.stream.Collectors;
import com.github.davidmarquis.redisq.Message;
import com.github.davidmarquis.redisq.consumer.MessageListener;
import com.github.davidmarquis.redisq.consumer.retry.RetryableMessageException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
/**
* 将信件投递到信件人的收件箱中
*
* @author xiaofanku
* @since 20200527
*/
@Component
public class ForumLetterPostInboxListener implements ApplicationListener<ForumLetterPostEvent>{
@Component("letterdeliver")
public class ForumLetterPostInboxListener implements MessageListener<ForumLetterPostEvent> {
@Autowired
private InboxDao inboxDao;
private final static Logger logger = LoggerFactory.getLogger(ForumLetterPostInboxListener.class);
@Override
public void onApplicationEvent(ForumLetterPostEvent event) {
ForumLetterReplica letter = event.getLetter();
logger.info("[Event][Letter][1]信件投递通知开始");
if (letter.getReceivers().isEmpty()) {
public void onMessage(Message<ForumLetterPostEvent> event) throws RetryableMessageException {
logger.info("[Letter][LetterPostEvent][1]信件投递通知开始");
ForumLetterPostEvent lpe = event.getPayload();
ForumLetter letter = lpe.getLetter();
Set<ForumLetterReceiver> receivers = lpe.getReceivers();
if (receivers.isEmpty()) {
return;
}
Set<Inbox> letterEntryRecords = letter.getReceivers().stream().map((ForumLetterReceiver fr)->new Inbox(fr.getMember(), letter.getAuthor(), letter.getNickname(), letter.getId())).collect(Collectors.toSet());
Set<Inbox> letterEntryRecords = receivers.stream().map((ForumLetterReceiver fr)->new Inbox(fr.getMember(), letter.getAuthor(), letter.getNickname(), letter.getId())).collect(Collectors.toSet());
inboxDao.batchSave(letterEntryRecords);
logger.info("[Event][Letter][1]信件投递通知结束");
logger.info("[Letter][LetterPostEvent][1]信件投递通知结束");
}
}
\ No newline at end of file
......@@ -8,7 +8,6 @@ import com.apobates.forum.letterbox.entity.ForumLetterReceiver;
import com.apobates.forum.letterbox.entity.ForumLetterTypeEnum;
import com.apobates.forum.letterbox.entity.Outbox;
import com.apobates.forum.letterbox.entity.proxy.ForumLetterReplica;
import com.apobates.forum.letterbox.impl.event.ForumLetterEventPublisher;
import com.apobates.forum.letterbox.impl.event.ForumLetterPostEvent;
import com.apobates.forum.letterbox.service.ForumLetterService;
import com.apobates.forum.utils.Commons;
......@@ -24,9 +23,11 @@ import java.util.concurrent.TimeUnit;
import java.util.function.BiFunction;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import com.github.davidmarquis.redisq.producer.MessageProducer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
/**
......@@ -40,8 +41,8 @@ public class ForumLetterServiceImpl implements ForumLetterService{
private ForumLetterDao forumLetterDao;
@Autowired
private OutboxDao outboxDao;
@Autowired
private ForumLetterEventPublisher forumLetterEventPublisher;
@Autowired @Qualifier("letterPostEventProducer")
private MessageProducer<ForumLetterPostEvent> letterPostEventProducer;
private final static Logger logger = LoggerFactory.getLogger(ForumLetterServiceImpl.class);
@Override
......@@ -74,7 +75,7 @@ public class ForumLetterServiceImpl implements ForumLetterService{
try{
ForumLetterReplica fr = forumLetterDao.pushLetter(letter, receiveres).orElseGet(ForumLetterReplica::new);
if(fr.getId()>0){
forumLetterEventPublisher.publishPostsEvent(new ForumLetterPostEvent(this, fr));
letterPostEventProducer.create(new ForumLetterPostEvent(fr.toEventPayload(), fr.getReceivers()));
return Optional.of(fr);
}
}catch(Exception e){
......
......@@ -7,6 +7,7 @@ open module LetterboxImpl {
requires transitive Letterbox;
requires Attention;
requires Utils;
requires Event;
exports com.apobates.forum.letterbox.impl;
exports com.apobates.forum.letterbox.impl.service;
}
\ No newline at end of file
......@@ -9,9 +9,10 @@ import javax.persistence.Transient;
* @since 20200510
*/
public class ForumLetterReceiver {
private final long member;
private final String memberNickname;
private long member;
private String memberNickname;
public ForumLetterReceiver(){}
public ForumLetterReceiver(long member, String memberNickname) {
super();
this.member = member;
......@@ -25,7 +26,15 @@ public class ForumLetterReceiver {
public String getMemberNickname() {
return memberNickname;
}
public void setMember(long member) {
this.member = member;
}
public void setMemberNickname(String memberNickname) {
this.memberNickname = memberNickname;
}
@Override
public int hashCode() {
final int prime = 31;
......
......@@ -50,4 +50,12 @@ public final class ForumLetterReplica extends ForumLetter implements ForumReplic
}
return getReceivers().stream().map(ForumLetterReceiver::getMemberNickname).collect(Collectors.joining(","));
}
public ForumLetter toEventPayload(){
ForumLetter fl = new ForumLetter();
fl.setId(this.getId());
fl.setNickname(this.getNickname());
fl.setAuthor(this.getAuthor());
return fl;
}
}
\ No newline at end of file
......@@ -3,7 +3,6 @@ package com.apobates.forum.member.impl.service;
import com.apobates.forum.member.dao.MemberDao;
import com.apobates.forum.member.dao.MemberVipExchangeRecordsDao;
import com.apobates.forum.member.entity.MemberGroupEnum;
import com.apobates.forum.member.entity.MemberPenalizeRecords;
import com.apobates.forum.member.entity.MemberVipExchangeRecords;
import com.apobates.forum.member.service.MemberVipExchangeRecordsService;
import com.apobates.forum.utils.DateTimeUtils;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册