Commit 639aafe0 by 段启岩

更新消息队列监听器架构2.0

parent 240f7243
...@@ -25,6 +25,6 @@ public class KafkaInitialConfig { ...@@ -25,6 +25,6 @@ public class KafkaInitialConfig {
*/ */
@Bean @Bean
public NewTopic initialTopic() { public NewTopic initialTopic() {
return new NewTopic(topicProperties.getSearchItemUpdate(),8, (short) 1 ); return new NewTopic(topicProperties.getSearchItemUpdate(),16, (short) 1 );
} }
} }
package cn.meteor.beyondclouds.core.listener;
import cn.meteor.beyondclouds.modules.queue.message.DataItemChangeMessage;
import cn.meteor.beyondclouds.modules.queue.message.DataItemChangeType;
import cn.meteor.beyondclouds.util.JsonUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.util.CollectionUtils;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Optional;
/**
* 数据更新监听器
* 监听本系统所有的数据更新 操作:更新操作包括
* @author meteor
*/
@Slf4j
public class DataItemChangeConsumer implements TopicConsumer, ApplicationContextAware {
private Collection<DataItemChangeListener> listeners;
@Override
@KafkaListener(topics = "${beyondclouds.kafka.topics.search-item-update}")
public final void onMessage(ConsumerRecord<?, String> record) {
Optional<String> kafkaMessage = Optional.ofNullable(record.value());
if (kafkaMessage.isPresent()) {
DataItemChangeMessage dataItemChangeMessage;
try {
dataItemChangeMessage = JsonUtils.toBean(kafkaMessage.get(), DataItemChangeMessage.class);
log.debug("接收到kafka消息:{}", dataItemChangeMessage.toString());
// 调用每个监听器对应的消息处理函数
DataItemChangeType changeType = dataItemChangeMessage.getChangeType();
listeners.forEach(listener -> {
switch (changeType) {
case ADD:
listener.onDataItemAdd(dataItemChangeMessage);
break;
case DELETE:
listener.onDataItemDelete(dataItemChangeMessage);
break;
case UPDATE:
listener.onDataItemUpdate(dataItemChangeMessage);
break;
case USER_NICK_UPDATE:
listener.onUserNickUpdate(dataItemChangeMessage);
break;
case USER_AVATAR_UPDATE:
listener.onUserAvatarUpdate(dataItemChangeMessage);
break;
}
});
} catch (Exception e) {
e.printStackTrace();
log.error("DataItemUpdateMessage consume failed:{}", e.getMessage());
}
}
}
@Override
public void setApplicationContext(ApplicationContext ctx) throws BeansException {
Map<String, DataItemChangeListener> listenerMap = ctx.getBeansOfType(DataItemChangeListener.class);
if (!CollectionUtils.isEmpty(listenerMap)) {
this.listeners = listenerMap.values();
} else {
this.listeners = List.of();
}
}
}
package cn.meteor.beyondclouds.core.listener; package cn.meteor.beyondclouds.core.listener;
import cn.meteor.beyondclouds.modules.queue.message.DataItemChangeMessage; import cn.meteor.beyondclouds.modules.queue.message.DataItemChangeMessage;
import cn.meteor.beyondclouds.modules.queue.message.DataItemChangeType;
import cn.meteor.beyondclouds.util.JsonUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.kafka.annotation.KafkaListener;
import java.util.Optional;
/** /**
* 数据更新监听器 * 数据更新监听器
...@@ -15,47 +9,7 @@ import java.util.Optional; ...@@ -15,47 +9,7 @@ import java.util.Optional;
* @author meteor * @author meteor
*/ */
@Slf4j @Slf4j
public class DataItemChangeListener implements TopicListener { public class DataItemChangeListener {
@Override
@KafkaListener(topics = "${beyondclouds.kafka.topics.search-item-update}")
public final void onMessage(ConsumerRecord<?, String> record) {
Optional<String> kafkaMessage = Optional.ofNullable(record.value());
if (kafkaMessage.isPresent()) {
DataItemChangeMessage dataItemChangeMessage;
try {
dataItemChangeMessage = JsonUtils.toBean(kafkaMessage.get(), DataItemChangeMessage.class);
log.debug("接收到kafka消息:{}", dataItemChangeMessage.toString());
// 调用对应的消息处理函数
DataItemChangeType changeType = dataItemChangeMessage.getChangeType();
switch (changeType) {
case ADD:
onDataItemAdd(dataItemChangeMessage);
break;
case DELETE:
onDataItemDelete(dataItemChangeMessage);
break;
case UPDATE:
onDataItemUpdate(dataItemChangeMessage);
break;
case USER_NICK_UPDATE:
onUserNickUpdate(dataItemChangeMessage);
break;
case USER_AVATAR_UPDATE:
onUserAvatarUpdate(dataItemChangeMessage);
break;
}
} catch (Exception e) {
e.printStackTrace();
log.error("DataItemUpdateMessage consume failed:{}", e.getMessage());
}
}
}
/** /**
* 有新数据添加到数据库 * 有新数据添加到数据库
......
...@@ -7,7 +7,7 @@ import org.apache.kafka.clients.consumer.ConsumerRecord; ...@@ -7,7 +7,7 @@ import org.apache.kafka.clients.consumer.ConsumerRecord;
* 监听Kafka队列里面的消息 * 监听Kafka队列里面的消息
* @author meteor * @author meteor
*/ */
public interface TopicListener { public interface TopicConsumer {
/** /**
* 订阅的topic有新的消息 * 订阅的topic有新的消息
......
package cn.meteor.beyondclouds.modules.blog.listener;
import cn.meteor.beyondclouds.core.listener.DataItemChangeListener;
import cn.meteor.beyondclouds.modules.queue.message.DataItemChangeMessage;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
* 用户信息更新监听器
* @author meteor
*/
@Slf4j
@Component("blogUserInfoChangeListener")
public class UserInfoChangeListener extends DataItemChangeListener {
@Override
public void onUserAvatarUpdate(DataItemChangeMessage dataItemChangeMessage) {
log.debug("blog-用户头像更新:{}", dataItemChangeMessage);
}
}
...@@ -14,7 +14,7 @@ import cn.meteor.beyondclouds.modules.blog.mapper.BlogMapper; ...@@ -14,7 +14,7 @@ import cn.meteor.beyondclouds.modules.blog.mapper.BlogMapper;
import cn.meteor.beyondclouds.modules.blog.service.*; import cn.meteor.beyondclouds.modules.blog.service.*;
import cn.meteor.beyondclouds.modules.queue.message.DataItemChangeMessage; import cn.meteor.beyondclouds.modules.queue.message.DataItemChangeMessage;
import cn.meteor.beyondclouds.modules.queue.service.IMessageQueueService; import cn.meteor.beyondclouds.modules.queue.service.IMessageQueueService;
import cn.meteor.beyondclouds.modules.search.enums.SearchItemType; import cn.meteor.beyondclouds.modules.search.enums.DataItemType;
import cn.meteor.beyondclouds.modules.tag.entity.Tag; import cn.meteor.beyondclouds.modules.tag.entity.Tag;
import cn.meteor.beyondclouds.modules.tag.service.ITagService; import cn.meteor.beyondclouds.modules.tag.service.ITagService;
import cn.meteor.beyondclouds.modules.topic.entity.Topic; import cn.meteor.beyondclouds.modules.topic.entity.Topic;
...@@ -154,7 +154,7 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB ...@@ -154,7 +154,7 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB
// 5.发送消息到消息队列 // 5.发送消息到消息队列
messageQueueService messageQueueService
.sendItemUpdateMessage( .sendItemUpdateMessage(
DataItemChangeMessage.addMessage(SearchItemType.BLOG, blog.getBlogId()) DataItemChangeMessage.addMessage(DataItemType.BLOG, blog.getBlogId())
); );
} }
...@@ -204,7 +204,7 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB ...@@ -204,7 +204,7 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB
// 5.发送消息到消息队列 // 5.发送消息到消息队列
messageQueueService messageQueueService
.sendItemUpdateMessage( .sendItemUpdateMessage(
DataItemChangeMessage.deleteMessage(SearchItemType.BLOG, blog.getBlogId()) DataItemChangeMessage.deleteMessage(DataItemType.BLOG, blog.getBlogId())
); );
} }
...@@ -379,7 +379,7 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB ...@@ -379,7 +379,7 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB
// 5.发送消息到消息队列 // 5.发送消息到消息队列
messageQueueService messageQueueService
.sendItemUpdateMessage( .sendItemUpdateMessage(
DataItemChangeMessage.updateMessage(SearchItemType.BLOG, blog.getBlogId()) DataItemChangeMessage.updateMessage(DataItemType.BLOG, blog.getBlogId())
); );
} }
......
package cn.meteor.beyondclouds.modules.post.listener;
import cn.meteor.beyondclouds.core.listener.DataItemChangeListener;
import cn.meteor.beyondclouds.modules.queue.message.DataItemChangeMessage;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
* 用户信息更新监听器
* @author meteor
*/
@Slf4j
@Component("postUserInfoChangeListener")
public class UserInfoChangeListener extends DataItemChangeListener {
@Override
public void onUserAvatarUpdate(DataItemChangeMessage dataItemChangeMessage) {
log.debug("post-用户头像更新:{}", dataItemChangeMessage);
}
}
package cn.meteor.beyondclouds.modules.project.listener;
import cn.meteor.beyondclouds.core.listener.DataItemChangeListener;
import cn.meteor.beyondclouds.modules.queue.message.DataItemChangeMessage;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
* 用户信息更新监听器
* @author meteor
*/
@Slf4j
@Component("projectUserInfoChangeListener")
public class UserInfoChangeListener extends DataItemChangeListener {
@Override
public void onUserAvatarUpdate(DataItemChangeMessage dataItemChangeMessage) {
log.debug("project-用户头像更新:{}", dataItemChangeMessage);
}
}
...@@ -14,7 +14,7 @@ import cn.meteor.beyondclouds.modules.project.service.IProjectExtService; ...@@ -14,7 +14,7 @@ import cn.meteor.beyondclouds.modules.project.service.IProjectExtService;
import cn.meteor.beyondclouds.modules.project.service.IProjectService; import cn.meteor.beyondclouds.modules.project.service.IProjectService;
import cn.meteor.beyondclouds.modules.queue.message.DataItemChangeMessage; import cn.meteor.beyondclouds.modules.queue.message.DataItemChangeMessage;
import cn.meteor.beyondclouds.modules.queue.service.IMessageQueueService; import cn.meteor.beyondclouds.modules.queue.service.IMessageQueueService;
import cn.meteor.beyondclouds.modules.search.enums.SearchItemType; import cn.meteor.beyondclouds.modules.search.enums.DataItemType;
import cn.meteor.beyondclouds.modules.user.entity.User; import cn.meteor.beyondclouds.modules.user.entity.User;
import cn.meteor.beyondclouds.modules.user.service.IUserService; import cn.meteor.beyondclouds.modules.user.service.IUserService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
...@@ -102,7 +102,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl ...@@ -102,7 +102,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
// 4.发送消息到消息队列 // 4.发送消息到消息队列
messageQueueService messageQueueService
.sendItemUpdateMessage( .sendItemUpdateMessage(
DataItemChangeMessage.addMessage(SearchItemType.PROJECT, project.getProjectId()) DataItemChangeMessage.addMessage(DataItemType.PROJECT, project.getProjectId())
); );
} }
...@@ -139,7 +139,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl ...@@ -139,7 +139,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
// 4.发送消息到消息队列 // 4.发送消息到消息队列
messageQueueService messageQueueService
.sendItemUpdateMessage( .sendItemUpdateMessage(
DataItemChangeMessage.deleteMessage(SearchItemType.PROJECT, project.getProjectId()) DataItemChangeMessage.deleteMessage(DataItemType.PROJECT, project.getProjectId())
); );
} }
...@@ -218,7 +218,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl ...@@ -218,7 +218,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
// 4.发送消息到消息队列 // 4.发送消息到消息队列
messageQueueService messageQueueService
.sendItemUpdateMessage( .sendItemUpdateMessage(
DataItemChangeMessage.updateMessage(SearchItemType.PROJECT, project.getProjectId()) DataItemChangeMessage.updateMessage(DataItemType.PROJECT, project.getProjectId())
); );
} }
......
...@@ -11,7 +11,7 @@ import cn.meteor.beyondclouds.modules.question.service.*; ...@@ -11,7 +11,7 @@ import cn.meteor.beyondclouds.modules.question.service.*;
import cn.meteor.beyondclouds.modules.question.util.QuestionUtils; import cn.meteor.beyondclouds.modules.question.util.QuestionUtils;
import cn.meteor.beyondclouds.modules.queue.message.DataItemChangeMessage; import cn.meteor.beyondclouds.modules.queue.message.DataItemChangeMessage;
import cn.meteor.beyondclouds.modules.queue.service.IMessageQueueService; import cn.meteor.beyondclouds.modules.queue.service.IMessageQueueService;
import cn.meteor.beyondclouds.modules.search.enums.SearchItemType; import cn.meteor.beyondclouds.modules.search.enums.DataItemType;
import cn.meteor.beyondclouds.modules.tag.entity.Tag; import cn.meteor.beyondclouds.modules.tag.entity.Tag;
import cn.meteor.beyondclouds.modules.tag.service.ITagService; import cn.meteor.beyondclouds.modules.tag.service.ITagService;
import cn.meteor.beyondclouds.modules.topic.entity.Topic; import cn.meteor.beyondclouds.modules.topic.entity.Topic;
...@@ -148,7 +148,7 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i ...@@ -148,7 +148,7 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
// 6.发送消息到消息队列 // 6.发送消息到消息队列
messageQueueService messageQueueService
.sendItemUpdateMessage( .sendItemUpdateMessage(
DataItemChangeMessage.addMessage(SearchItemType.QUESTION, question.getQuestionId()) DataItemChangeMessage.addMessage(DataItemType.QUESTION, question.getQuestionId())
); );
} }
...@@ -189,7 +189,7 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i ...@@ -189,7 +189,7 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
// 9.发送消息到消息队列 // 9.发送消息到消息队列
messageQueueService messageQueueService
.sendItemUpdateMessage( .sendItemUpdateMessage(
DataItemChangeMessage.deleteMessage(SearchItemType.QUESTION, question.getQuestionId()) DataItemChangeMessage.deleteMessage(DataItemType.QUESTION, question.getQuestionId())
); );
} }
...@@ -238,7 +238,7 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i ...@@ -238,7 +238,7 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
// 6.发送消息到消息队列 // 6.发送消息到消息队列
messageQueueService messageQueueService
.sendItemUpdateMessage( .sendItemUpdateMessage(
DataItemChangeMessage.updateMessage(SearchItemType.QUESTION, question.getQuestionId()) DataItemChangeMessage.updateMessage(DataItemType.QUESTION, question.getQuestionId())
); );
} }
......
package cn.meteor.beyondclouds.modules.queue.message; package cn.meteor.beyondclouds.modules.queue.message;
import cn.meteor.beyondclouds.modules.search.enums.SearchItemType; import cn.meteor.beyondclouds.modules.search.enums.DataItemType;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.ToString; import lombok.ToString;
...@@ -16,24 +16,32 @@ import java.io.Serializable; ...@@ -16,24 +16,32 @@ import java.io.Serializable;
@NoArgsConstructor @NoArgsConstructor
public class DataItemChangeMessage { public class DataItemChangeMessage {
public DataItemChangeMessage(DataItemChangeType changeType, SearchItemType itemType, Serializable itemId) { public DataItemChangeMessage(DataItemChangeType changeType, DataItemType itemType, Serializable itemId) {
this.itemId = itemId; this.itemId = itemId;
this.itemType = itemType; this.itemType = itemType;
this.changeType = changeType; this.changeType = changeType;
} }
public static DataItemChangeMessage addMessage(SearchItemType itemType, Serializable itemId) { public static DataItemChangeMessage addMessage(DataItemType itemType, Serializable itemId) {
return new DataItemChangeMessage(DataItemChangeType.ADD, itemType, itemId); return new DataItemChangeMessage(DataItemChangeType.ADD, itemType, itemId);
} }
public static DataItemChangeMessage deleteMessage(SearchItemType itemType, Serializable itemId) { public static DataItemChangeMessage deleteMessage(DataItemType itemType, Serializable itemId) {
return new DataItemChangeMessage(DataItemChangeType.DELETE, itemType, itemId); return new DataItemChangeMessage(DataItemChangeType.DELETE, itemType, itemId);
} }
public static DataItemChangeMessage updateMessage(SearchItemType itemType, Serializable itemId) { public static DataItemChangeMessage updateMessage(DataItemType itemType, Serializable itemId) {
return new DataItemChangeMessage(DataItemChangeType.UPDATE, itemType, itemId); return new DataItemChangeMessage(DataItemChangeType.UPDATE, itemType, itemId);
} }
public static DataItemChangeMessage userAvatarUpdateMessage(DataItemType itemType, Serializable itemId) {
return new DataItemChangeMessage(DataItemChangeType.USER_AVATAR_UPDATE, itemType, itemId);
}
public static DataItemChangeMessage userNickUpdateMessage(DataItemType itemType, Serializable itemId) {
return new DataItemChangeMessage(DataItemChangeType.USER_NICK_UPDATE, itemType, itemId);
}
/** /**
* 条目ID * 条目ID
*/ */
...@@ -42,7 +50,7 @@ public class DataItemChangeMessage { ...@@ -42,7 +50,7 @@ public class DataItemChangeMessage {
/** /**
* 条目类型 * 条目类型
*/ */
private SearchItemType itemType; private DataItemType itemType;
/** /**
* 条目改变类型 * 条目改变类型
......
package cn.meteor.beyondclouds.modules.search.entity; package cn.meteor.beyondclouds.modules.search.entity;
import cn.meteor.beyondclouds.modules.blog.bean.BlogDetail; import cn.meteor.beyondclouds.modules.blog.bean.BlogDetail;
import cn.meteor.beyondclouds.modules.search.enums.SearchItemType; import cn.meteor.beyondclouds.modules.search.enums.DataItemType;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.ToString; import lombok.ToString;
...@@ -27,7 +27,7 @@ public class SearchItem { ...@@ -27,7 +27,7 @@ public class SearchItem {
* @param itemType * @param itemType
* @param itemId * @param itemId
*/ */
public SearchItem(SearchItemType itemType, String itemId) { public SearchItem(DataItemType itemType, String itemId) {
this.id = SearchItemId.of(itemType, itemId); this.id = SearchItemId.of(itemType, itemId);
this.itemType = itemType; this.itemType = itemType;
this.itemId = itemId; this.itemId = itemId;
...@@ -46,7 +46,7 @@ public class SearchItem { ...@@ -46,7 +46,7 @@ public class SearchItem {
* 数据类型 * 数据类型
*/ */
@Field(type = FieldType.Text) @Field(type = FieldType.Text)
private SearchItemType itemType; private DataItemType itemType;
/** /**
* 数据标题 * 数据标题
......
package cn.meteor.beyondclouds.modules.search.entity; package cn.meteor.beyondclouds.modules.search.entity;
import cn.meteor.beyondclouds.modules.search.enums.SearchItemType; import cn.meteor.beyondclouds.modules.search.enums.DataItemType;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
...@@ -11,16 +11,16 @@ import lombok.NoArgsConstructor; ...@@ -11,16 +11,16 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor @NoArgsConstructor
public class SearchItemId { public class SearchItemId {
private SearchItemType itemType; private DataItemType itemType;
private String itemId; private String itemId;
public SearchItemId(SearchItemType itemType, String itemId) { public SearchItemId(DataItemType itemType, String itemId) {
this.itemType = itemType; this.itemType = itemType;
this.itemId = itemId; this.itemId = itemId;
} }
public static SearchItemId of(SearchItemType searchItemType, String itemId) { public static SearchItemId of(DataItemType dataItemType, String itemId) {
return new SearchItemId(searchItemType, itemId); return new SearchItemId(dataItemType, itemId);
} }
@Override @Override
......
...@@ -3,16 +3,14 @@ package cn.meteor.beyondclouds.modules.search.enums; ...@@ -3,16 +3,14 @@ package cn.meteor.beyondclouds.modules.search.enums;
import cn.meteor.beyondclouds.modules.blog.entity.Blog; import cn.meteor.beyondclouds.modules.blog.entity.Blog;
import cn.meteor.beyondclouds.modules.project.entity.Project; import cn.meteor.beyondclouds.modules.project.entity.Project;
import cn.meteor.beyondclouds.modules.question.entity.Question; import cn.meteor.beyondclouds.modules.question.entity.Question;
import cn.meteor.beyondclouds.modules.tag.entity.Tag;
import cn.meteor.beyondclouds.modules.user.entity.User; import cn.meteor.beyondclouds.modules.user.entity.User;
import lombok.Data;
import lombok.Getter; import lombok.Getter;
/** /**
* @author meteor * @author meteor
*/ */
@Getter @Getter
public enum SearchItemType { public enum DataItemType {
/** /**
* 用户 * 用户
...@@ -36,7 +34,7 @@ public enum SearchItemType { ...@@ -36,7 +34,7 @@ public enum SearchItemType {
private Class<?> classOfItem; private Class<?> classOfItem;
SearchItemType(Class<?> classOfItem) { DataItemType(Class<?> classOfItem) {
this.classOfItem = classOfItem; this.classOfItem = classOfItem;
} }
} }
...@@ -2,15 +2,11 @@ package cn.meteor.beyondclouds.modules.search.listener; ...@@ -2,15 +2,11 @@ package cn.meteor.beyondclouds.modules.search.listener;
import cn.meteor.beyondclouds.core.listener.DataItemChangeListener; import cn.meteor.beyondclouds.core.listener.DataItemChangeListener;
import cn.meteor.beyondclouds.modules.queue.message.DataItemChangeMessage; import cn.meteor.beyondclouds.modules.queue.message.DataItemChangeMessage;
import cn.meteor.beyondclouds.modules.queue.message.DataItemChangeType;
import cn.meteor.beyondclouds.modules.search.enums.SearchItemType;
import cn.meteor.beyondclouds.modules.search.service.ISearchService; import cn.meteor.beyondclouds.modules.search.service.ISearchService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.io.Serializable;
/** /**
* @author meteor * @author meteor
*/ */
...@@ -32,11 +28,11 @@ public class SearchItemItemChangeListener extends DataItemChangeListener { ...@@ -32,11 +28,11 @@ public class SearchItemItemChangeListener extends DataItemChangeListener {
@Override @Override
public void onDataItemUpdate(DataItemChangeMessage dataItemChangeMessage) { public void onDataItemUpdate(DataItemChangeMessage dataItemChangeMessage) {
searchService.deleteSearchItem(dataItemChangeMessage.getItemType(), String.valueOf(dataItemChangeMessage.getItemId())); searchService.updateSearchItem(dataItemChangeMessage.getItemType(), String.valueOf(dataItemChangeMessage.getItemId()));
} }
@Override @Override
public void onDataItemDelete(DataItemChangeMessage dataItemChangeMessage) { public void onDataItemDelete(DataItemChangeMessage dataItemChangeMessage) {
searchService.updateSearchItem(dataItemChangeMessage.getItemType(), String.valueOf(dataItemChangeMessage.getItemId())); searchService.deleteSearchItem(dataItemChangeMessage.getItemType(), String.valueOf(dataItemChangeMessage.getItemId()));
} }
} }
package cn.meteor.beyondclouds.modules.search.service; package cn.meteor.beyondclouds.modules.search.service;
import cn.meteor.beyondclouds.modules.search.entity.SearchItem; import cn.meteor.beyondclouds.modules.search.entity.SearchItem;
import cn.meteor.beyondclouds.modules.search.enums.SearchItemType; import cn.meteor.beyondclouds.modules.search.enums.DataItemType;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import java.util.Optional; import java.util.Optional;
...@@ -15,32 +14,32 @@ public interface ISearchService { ...@@ -15,32 +14,32 @@ public interface ISearchService {
/** /**
* 添加搜索条目 * 添加搜索条目
* @param searchItemType * @param dataItemType
* @param itemId * @param itemId
*/ */
void saveSearchItem(SearchItemType searchItemType, String itemId); void saveSearchItem(DataItemType dataItemType, String itemId);
/** /**
* 删除搜索条目 * 删除搜索条目
* @param searchItemType * @param dataItemType
* @param itemId * @param itemId
*/ */
void deleteSearchItem(SearchItemType searchItemType, String itemId); void deleteSearchItem(DataItemType dataItemType, String itemId);
/** /**
* 更新搜索条目 * 更新搜索条目
* @param searchItemType * @param dataItemType
* @param itemId * @param itemId
*/ */
void updateSearchItem(SearchItemType searchItemType, String itemId); void updateSearchItem(DataItemType dataItemType, String itemId);
/** /**
* 查找搜索条目 * 查找搜索条目
* @param searchItemType * @param dataItemType
* @param itemId * @param itemId
* @return * @return
*/ */
Optional<SearchItem> getSearchItem(SearchItemType searchItemType, String itemId); Optional<SearchItem> getSearchItem(DataItemType dataItemType, String itemId);
/** /**
* 根据关键词分页搜索 * 根据关键词分页搜索
......
...@@ -16,7 +16,7 @@ import cn.meteor.beyondclouds.modules.question.exception.QuestionTagServiceExcep ...@@ -16,7 +16,7 @@ import cn.meteor.beyondclouds.modules.question.exception.QuestionTagServiceExcep
import cn.meteor.beyondclouds.modules.question.service.IQuestionService; import cn.meteor.beyondclouds.modules.question.service.IQuestionService;
import cn.meteor.beyondclouds.modules.search.entity.SearchItem; import cn.meteor.beyondclouds.modules.search.entity.SearchItem;
import cn.meteor.beyondclouds.modules.search.entity.SearchItemId; import cn.meteor.beyondclouds.modules.search.entity.SearchItemId;
import cn.meteor.beyondclouds.modules.search.enums.SearchItemType; import cn.meteor.beyondclouds.modules.search.enums.DataItemType;
import cn.meteor.beyondclouds.modules.search.repository.ISearchRepository; import cn.meteor.beyondclouds.modules.search.repository.ISearchRepository;
import cn.meteor.beyondclouds.modules.search.service.ISearchService; import cn.meteor.beyondclouds.modules.search.service.ISearchService;
import cn.meteor.beyondclouds.modules.topic.service.ITopicService; import cn.meteor.beyondclouds.modules.topic.service.ITopicService;
...@@ -62,7 +62,7 @@ public class SearchServiceImpl implements ISearchService { ...@@ -62,7 +62,7 @@ public class SearchServiceImpl implements ISearchService {
} }
@Override @Override
public void saveSearchItem(SearchItemType itemType, String itemId) { public void saveSearchItem(DataItemType itemType, String itemId) {
SearchItem searchItem = getSearchItemInDb(itemType, itemId); SearchItem searchItem = getSearchItemInDb(itemType, itemId);
if (null != searchItem) { if (null != searchItem) {
searchRepository.save(searchItem); searchRepository.save(searchItem);
...@@ -71,20 +71,20 @@ public class SearchServiceImpl implements ISearchService { ...@@ -71,20 +71,20 @@ public class SearchServiceImpl implements ISearchService {
} }
@Override @Override
public void deleteSearchItem(SearchItemType itemType, String itemId) { public void deleteSearchItem(DataItemType itemType, String itemId) {
searchRepository.deleteById(SearchItemId.of(itemType, itemId)); searchRepository.deleteById(SearchItemId.of(itemType, itemId));
log.debug("elasticsearch-delete:{}", SearchItemId.of(itemType, itemId)); log.debug("elasticsearch-delete:{}", SearchItemId.of(itemType, itemId));
} }
@Override @Override
public void updateSearchItem(SearchItemType itemType, String itemId) { public void updateSearchItem(DataItemType itemType, String itemId) {
SearchItem searchItem = getSearchItemInDb(itemType, itemId); SearchItem searchItem = getSearchItemInDb(itemType, itemId);
searchRepository.save(searchItem); searchRepository.save(searchItem);
log.debug("elasticsearch-update:{}", searchItem); log.debug("elasticsearch-update:{}", searchItem);
} }
@Override @Override
public Optional<SearchItem> getSearchItem(SearchItemType itemType, String itemId) { public Optional<SearchItem> getSearchItem(DataItemType itemType, String itemId) {
return searchRepository.findById(SearchItemId.of(itemType, itemId)); return searchRepository.findById(SearchItemId.of(itemType, itemId));
} }
...@@ -110,7 +110,7 @@ public class SearchServiceImpl implements ISearchService { ...@@ -110,7 +110,7 @@ public class SearchServiceImpl implements ISearchService {
List<User> userList = userPage.getRecords(); List<User> userList = userPage.getRecords();
if (!CollectionUtils.isEmpty(userList)) { if (!CollectionUtils.isEmpty(userList)) {
userList.forEach(user -> { userList.forEach(user -> {
saveSearchItem(SearchItemType.USER, user.getUserId()); saveSearchItem(DataItemType.USER, user.getUserId());
}); });
current++; current++;
} else { } else {
...@@ -126,7 +126,7 @@ public class SearchServiceImpl implements ISearchService { ...@@ -126,7 +126,7 @@ public class SearchServiceImpl implements ISearchService {
List<Project> projectList = projectPage.getRecords(); List<Project> projectList = projectPage.getRecords();
if (!CollectionUtils.isEmpty(projectList)) { if (!CollectionUtils.isEmpty(projectList)) {
projectList.forEach(project -> { projectList.forEach(project -> {
saveSearchItem(SearchItemType.PROJECT, String.valueOf(project.getProjectId())); saveSearchItem(DataItemType.PROJECT, String.valueOf(project.getProjectId()));
}); });
current++; current++;
} else { } else {
...@@ -142,7 +142,7 @@ public class SearchServiceImpl implements ISearchService { ...@@ -142,7 +142,7 @@ public class SearchServiceImpl implements ISearchService {
List<Question> questionList = questionPage.getRecords(); List<Question> questionList = questionPage.getRecords();
if (!CollectionUtils.isEmpty(questionList)) { if (!CollectionUtils.isEmpty(questionList)) {
questionList.forEach(question -> { questionList.forEach(question -> {
saveSearchItem(SearchItemType.QUESTION, question.getQuestionId()); saveSearchItem(DataItemType.QUESTION, question.getQuestionId());
}); });
current++; current++;
} else { } else {
...@@ -158,7 +158,7 @@ public class SearchServiceImpl implements ISearchService { ...@@ -158,7 +158,7 @@ public class SearchServiceImpl implements ISearchService {
List<Blog> questionList = blogPage.getRecords(); List<Blog> questionList = blogPage.getRecords();
if (!CollectionUtils.isEmpty(questionList)) { if (!CollectionUtils.isEmpty(questionList)) {
questionList.forEach(blog -> { questionList.forEach(blog -> {
saveSearchItem(SearchItemType.BLOG, blog.getBlogId()); saveSearchItem(DataItemType.BLOG, blog.getBlogId());
}); });
current++; current++;
} else { } else {
...@@ -167,7 +167,7 @@ public class SearchServiceImpl implements ISearchService { ...@@ -167,7 +167,7 @@ public class SearchServiceImpl implements ISearchService {
} }
} }
private SearchItem getSearchItemInDb(SearchItemType itemType, String itemId) { private SearchItem getSearchItemInDb(DataItemType itemType, String itemId) {
SearchItem searchItem = null; SearchItem searchItem = null;
try { try {
switch (itemType) { switch (itemType) {
...@@ -196,7 +196,7 @@ public class SearchServiceImpl implements ISearchService { ...@@ -196,7 +196,7 @@ public class SearchServiceImpl implements ISearchService {
private SearchItem buildSearchItemFromProject(String projectId) throws ProjectServiceException { private SearchItem buildSearchItemFromProject(String projectId) throws ProjectServiceException {
ProjectDetail projectDetail = projectService.getProject(projectId); ProjectDetail projectDetail = projectService.getProject(projectId);
if (null != projectDetail) { if (null != projectDetail) {
SearchItem searchItem = new SearchItem(SearchItemType.PROJECT, projectId); SearchItem searchItem = new SearchItem(DataItemType.PROJECT, projectId);
searchItem.setTitle(projectDetail.getProjectName()); searchItem.setTitle(projectDetail.getProjectName());
searchItem.setContent(projectDetail.getProjectDetail()); searchItem.setContent(projectDetail.getProjectDetail());
searchItem.setCover(projectDetail.getCover()); searchItem.setCover(projectDetail.getCover());
...@@ -211,7 +211,7 @@ public class SearchServiceImpl implements ISearchService { ...@@ -211,7 +211,7 @@ public class SearchServiceImpl implements ISearchService {
private SearchItem buildSearchItemFromUser(String userId) { private SearchItem buildSearchItemFromUser(String userId) {
User user = userService.getById(userId); User user = userService.getById(userId);
if (null != user) { if (null != user) {
SearchItem searchItem = new SearchItem(SearchItemType.USER, userId); SearchItem searchItem = new SearchItem(DataItemType.USER, userId);
searchItem.setTitle(user.getNickName()); searchItem.setTitle(user.getNickName());
searchItem.setCover(user.getUserAvatar()); searchItem.setCover(user.getUserAvatar());
searchItem.setDescription(user.getSignature()); searchItem.setDescription(user.getSignature());
...@@ -225,7 +225,7 @@ public class SearchServiceImpl implements ISearchService { ...@@ -225,7 +225,7 @@ public class SearchServiceImpl implements ISearchService {
private SearchItem buildSearchItemFromQuestion(String questionId) throws QuestionServiceException, QuestionTagServiceException { private SearchItem buildSearchItemFromQuestion(String questionId) throws QuestionServiceException, QuestionTagServiceException {
QuestionDetail questionDetail = questionService.questionDetails(questionId); QuestionDetail questionDetail = questionService.questionDetails(questionId);
if (null != questionDetail) { if (null != questionDetail) {
SearchItem searchItem = new SearchItem(SearchItemType.QUESTION, questionId); SearchItem searchItem = new SearchItem(DataItemType.QUESTION, questionId);
searchItem.setTitle(questionDetail.getQuestionTitle()); searchItem.setTitle(questionDetail.getQuestionTitle());
searchItem.setContent(questionDetail.getQuestionDetail()); searchItem.setContent(questionDetail.getQuestionDetail());
searchItem.setDescription(questionDetail.getQuestionAbstract()); searchItem.setDescription(questionDetail.getQuestionAbstract());
...@@ -239,7 +239,7 @@ public class SearchServiceImpl implements ISearchService { ...@@ -239,7 +239,7 @@ public class SearchServiceImpl implements ISearchService {
private SearchItem buildSearchItemFromBlog(String blogId) throws BlogServiceException { private SearchItem buildSearchItemFromBlog(String blogId) throws BlogServiceException {
BlogDetail blogDetail = blogService.getBlog(blogId, Subject.anonymous(this.getClass().getName())); BlogDetail blogDetail = blogService.getBlog(blogId, Subject.anonymous(this.getClass().getName()));
if (null != blogDetail) { if (null != blogDetail) {
SearchItem searchItem = new SearchItem(SearchItemType.BLOG, blogId); SearchItem searchItem = new SearchItem(DataItemType.BLOG, blogId);
searchItem.setTitle(blogDetail.getBlogTitle()); searchItem.setTitle(blogDetail.getBlogTitle());
searchItem.setContent(blogDetail.getContent()); searchItem.setContent(blogDetail.getContent());
searchItem.setCover(blogDetail.getCover()); searchItem.setCover(blogDetail.getCover());
......
...@@ -16,7 +16,7 @@ import cn.meteor.beyondclouds.modules.question.entity.Question; ...@@ -16,7 +16,7 @@ import cn.meteor.beyondclouds.modules.question.entity.Question;
import cn.meteor.beyondclouds.modules.question.service.IQuestionService; import cn.meteor.beyondclouds.modules.question.service.IQuestionService;
import cn.meteor.beyondclouds.modules.queue.message.DataItemChangeMessage; import cn.meteor.beyondclouds.modules.queue.message.DataItemChangeMessage;
import cn.meteor.beyondclouds.modules.queue.service.IMessageQueueService; import cn.meteor.beyondclouds.modules.queue.service.IMessageQueueService;
import cn.meteor.beyondclouds.modules.search.enums.SearchItemType; import cn.meteor.beyondclouds.modules.search.enums.DataItemType;
import cn.meteor.beyondclouds.modules.tag.entity.Tag; import cn.meteor.beyondclouds.modules.tag.entity.Tag;
import cn.meteor.beyondclouds.modules.tag.service.ITagService; import cn.meteor.beyondclouds.modules.tag.service.ITagService;
import cn.meteor.beyondclouds.modules.user.entity.User; import cn.meteor.beyondclouds.modules.user.entity.User;
...@@ -236,12 +236,30 @@ public class UserServiceImpl extends ServiceImpl<IUserMapper, User> implements I ...@@ -236,12 +236,30 @@ public class UserServiceImpl extends ServiceImpl<IUserMapper, User> implements I
@Override @Override
public void alterBaseInfo(User user) throws UserServiceException { public void alterBaseInfo(User user) throws UserServiceException {
boolean userNickUpdate = !StringUtils.isEmpty(user.getNickName());
boolean userAvatarUpdate = !StringUtils.isEmpty(user.getUserAvatar());
updateById(user); updateById(user);
if (userNickUpdate) {
messageQueueService
.sendItemUpdateMessage(
DataItemChangeMessage.userNickUpdateMessage(DataItemType.USER, user.getUserId())
);
}
if (userAvatarUpdate) {
messageQueueService
.sendItemUpdateMessage(
DataItemChangeMessage.userAvatarUpdateMessage(DataItemType.USER, user.getUserId())
);
}
// 发送消息到消息队列 // 发送消息到消息队列
messageQueueService messageQueueService
.sendItemUpdateMessage( .sendItemUpdateMessage(
DataItemChangeMessage.updateMessage(SearchItemType.USER, user.getUserId()) DataItemChangeMessage.updateMessage(DataItemType.USER, user.getUserId())
); );
} }
......
...@@ -3,7 +3,7 @@ package cn.meteor.beyondclouds.modules.queue.service.impl; ...@@ -3,7 +3,7 @@ package cn.meteor.beyondclouds.modules.queue.service.impl;
import cn.meteor.beyondclouds.modules.queue.message.DataItemChangeMessage; import cn.meteor.beyondclouds.modules.queue.message.DataItemChangeMessage;
import cn.meteor.beyondclouds.modules.queue.message.DataItemChangeType; import cn.meteor.beyondclouds.modules.queue.message.DataItemChangeType;
import cn.meteor.beyondclouds.modules.queue.service.IMessageQueueService; import cn.meteor.beyondclouds.modules.queue.service.IMessageQueueService;
import cn.meteor.beyondclouds.modules.search.enums.SearchItemType; import cn.meteor.beyondclouds.modules.search.enums.DataItemType;
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;
...@@ -26,7 +26,7 @@ public class MessageQueueServiceImplTest { ...@@ -26,7 +26,7 @@ public class MessageQueueServiceImplTest {
// messageQueueService.send(message); // messageQueueService.send(message);
DataItemChangeMessage itemUpdateMessage = new DataItemChangeMessage(); DataItemChangeMessage itemUpdateMessage = new DataItemChangeMessage();
itemUpdateMessage.setItemId("123"); itemUpdateMessage.setItemId("123");
itemUpdateMessage.setItemType(SearchItemType.PROJECT); itemUpdateMessage.setItemType(DataItemType.PROJECT);
itemUpdateMessage.setChangeType(DataItemChangeType.ADD); itemUpdateMessage.setChangeType(DataItemChangeType.ADD);
messageQueueService.sendItemUpdateMessage(itemUpdateMessage); messageQueueService.sendItemUpdateMessage(itemUpdateMessage);
} }
......
...@@ -2,7 +2,7 @@ package cn.meteor.beyondclouds.modules.search.repository; ...@@ -2,7 +2,7 @@ package cn.meteor.beyondclouds.modules.search.repository;
import cn.meteor.beyondclouds.modules.search.entity.SearchItem; import cn.meteor.beyondclouds.modules.search.entity.SearchItem;
import cn.meteor.beyondclouds.modules.search.enums.SearchItemType; import cn.meteor.beyondclouds.modules.search.enums.DataItemType;
import org.elasticsearch.index.query.DisMaxQueryBuilder; import org.elasticsearch.index.query.DisMaxQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.query.QueryBuilders;
...@@ -31,7 +31,7 @@ public class ISearchRepositoryTest { ...@@ -31,7 +31,7 @@ public class ISearchRepositoryTest {
searchItem.setTitle("ok"); searchItem.setTitle("ok");
searchItem.setCreateTime(new Date()); searchItem.setCreateTime(new Date());
searchItem.setItemId("aad"); searchItem.setItemId("aad");
searchItem.setItemType(SearchItemType.BLOG); searchItem.setItemType(DataItemType.BLOG);
searchRepository.save(searchItem); searchRepository.save(searchItem);
} }
......
package cn.meteor.beyondclouds.modules.search.service.impl; package cn.meteor.beyondclouds.modules.search.service.impl;
import cn.meteor.beyondclouds.modules.search.entity.SearchItem; import cn.meteor.beyondclouds.modules.search.entity.SearchItem;
import cn.meteor.beyondclouds.modules.search.enums.SearchItemType; import cn.meteor.beyondclouds.modules.search.enums.DataItemType;
import cn.meteor.beyondclouds.modules.search.service.ISearchService; import cn.meteor.beyondclouds.modules.search.service.ISearchService;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
...@@ -11,8 +11,6 @@ import org.springframework.test.context.junit4.SpringRunner; ...@@ -11,8 +11,6 @@ import org.springframework.test.context.junit4.SpringRunner;
import java.util.Optional; import java.util.Optional;
import static org.junit.Assert.*;
@SpringBootTest @SpringBootTest
@RunWith(SpringRunner.class) @RunWith(SpringRunner.class)
public class SearchServiceImplTest { public class SearchServiceImplTest {
...@@ -22,12 +20,12 @@ public class SearchServiceImplTest { ...@@ -22,12 +20,12 @@ public class SearchServiceImplTest {
@Test @Test
public void saveSearchItem() { public void saveSearchItem() {
searchService.saveSearchItem(SearchItemType.BLOG, "123"); searchService.saveSearchItem(DataItemType.BLOG, "123");
} }
@Test @Test
public void getSearchItem() { public void getSearchItem() {
Optional<SearchItem> optionalSearchItem = searchService.getSearchItem(SearchItemType.BLOG, "123"); Optional<SearchItem> optionalSearchItem = searchService.getSearchItem(DataItemType.BLOG, "123");
if (optionalSearchItem.isPresent()) { if (optionalSearchItem.isPresent()) {
System.out.println(optionalSearchItem.get()); System.out.println(optionalSearchItem.get());
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment