1.1 redis topic的一些定义
/**
* redis发布定义
* @author lhy
* @date 2019.12.10
*/
public interface RedisPubSub {
/**
* 订阅处理方法
*/
String INVOKE_METHOD = "receiveMessage";
/**
* 订阅频道:处理打卡记录
*/
String STUDENT_RECORD = "ztxc:pub";
}
1.2 redis消息发布(模拟终端发布消息)
/**
* redis消息发布
* @author lhy
* @date 2019.12.10
*/
public class RdeisPublisher {
private final JedisPool jedisPool;
public RdeisPublisher(JedisPool jedisPool) {
this.jedisPool = jedisPool;
}
public void sendMsg(){
JSONObject json = new JSONObject();
json.put("time","2019-12-10");
json.put("vid","k123456");
json.put("address","山东省济南市");
json.put("carNum","123456");
Jedis jedis = jedisPool.getResource();
//从 mychannel 的频道上推送消息
jedis.publish("ztxc:pub", json.toString());
}
}
1.3 消息订阅业务处理类
/**
* 消息订阅业务处理类
* @author lhy
* @date 2019.12.10
*/
@Service
public class BusinessSubService {
private static Logger LOGGER = LoggerFactory.getLogger(BusinessSubService.class);
public void receiveMessage(String message, String channel) {
LOGGER.debug("################SUBSCRIBE######### message:{}, channel:{} #############", message, channel);
switch (channel) {
case RedisPubSub.STUDENT_RECORD:
msgSubService(message);
break;
default:
break;
}
}
/**
* 解析消息体进行业务操作
* @param message
*/
public void msgSubService(String message){
JSONObject jsonObject = JSONObject.parseObject(message);
String time = (String) jsonObject.get("time");
String vid =(String) jsonObject.get("vid");
String address =(String) jsonObject.get("address");
String cardNum =(String) jsonObject.get("carNum");
//以下是业务操作
LOGGER.debug("业务处理: " + jsonObject);
}
}
1.4 redis配置类 配置消息订阅业务处理bean
@Configuration
public class RedisConfig {
@Autowired
private BusinessSubService businessSubService;
@Bean
public RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
MessageListenerAdapter listenerAdapter) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
List topicList = new ArrayList<>();
topicList.add(new PatternTopic(RedisPubSub.STUDENT_RECORD));
container.addMessageListener(listenerAdapter, topicList);
return container;
}
@Bean
public MessageListenerAdapter listenerAdapter() {
return new MessageListenerAdapter(businessSubService, RedisPubSub.INVOKE_METHOD);
}
}
1.5 SpringBoot Task发布消息队列测试
/**
* 定时任务发布消息队列
*/
@Configuration
@EnableScheduling
public class RedisPubTask {
@Scheduled(fixedRate=5000)
private void configureTasks() {
JedisPool jedisPool = new JedisPool(new JedisPoolConfig(), "127.0.0.1", 6379,0,"123456");
RdeisPublisher rdeisPublisher = new RdeisPublisher(jedisPool);
rdeisPublisher.sendMsg();
}
}
2019-12-16 20:32:21,306 DEBUG (BusinessSubService.java:42)- 业务处理: {"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}
2019-12-16 20:32:26,305 DEBUG (BusinessSubService.java:20)- ################SUBSCRIBE######### message:{"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}, channel:ztxc:pub #############
2019-12-16 20:32:26,305 DEBUG (BusinessSubService.java:42)- 业务处理: {"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}
2019-12-16 20:32:31,305 DEBUG (BusinessSubService.java:20)- ################SUBSCRIBE######### message:{"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}, channel:ztxc:pub #############
2019-12-16 20:32:31,305 DEBUG (BusinessSubService.java:42)- 业务处理: {"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}
2019-12-16 20:32:36,311 DEBUG (BusinessSubService.java:20)- ################SUBSCRIBE######### message:{"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}, channel:ztxc:pub #############
2019-12-16 20:32:36,312 DEBUG (BusinessSubService.java:42)- 业务处理: {"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}
2019-12-16 20:32:41,301 DEBUG (BusinessSubService.java:20)- ################SUBSCRIBE######### message:{"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}, channel:ztxc:pub #############
2019-12-16 20:32:41,301 DEBUG (BusinessSubService.java:42)- 业务处理: {"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}
2019-12-16 20:32:46,303 DEBUG (BusinessSubService.java:20)- ################SUBSCRIBE######### message:{"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}, channel:ztxc:pub #############
2019-12-16 20:32:46,304 DEBUG (BusinessSubService.java:42)- 业务处理: {"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}
2019-12-16 20:32:51,305 DEBUG (BusinessSubService.java:20)- ################SUBSCRIBE######### message:{"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}, channel:ztxc:pub #############
2019-12-16 20:32:51,305 DEBUG (BusinessSubService.java:42)- 业务处理: {"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}
2019-12-16 20:32:56,302 DEBUG (BusinessSubService.java:20)- ################SUBSCRIBE######### message:{"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}, channel:ztxc:pub #############
2019-12-16 20:32:56,302 DEBUG (BusinessSubService.java:42)- 业务处理: {"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}
2019-12-16 20:33:01,310 DEBUG (BusinessSubService.java:20)- ################SUBSCRIBE######### message:{"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}, channel:ztxc:pub #############
2019-12-16 20:33:01,311 DEBUG (BusinessSubService.java:42)- 业务处理: {"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}
2019-12-16 20:33:06,310 DEBUG (BusinessSubService.java:20)- ################SUBSCRIBE######### message:{"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}, channel:ztxc:pub #############
2019-12-16 20:33:06,310 DEBUG (BusinessSubService.java:42)- 业务处理: {"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}
2019-12-16 20:33:11,307 DEBUG (BusinessSubService.java:20)- ################SUBSCRIBE######### message:{"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}, channel:ztxc:pub #############
2019-12-16 20:33:11,307 DEBUG (BusinessSubService.java:42)- 业务处理: {"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}
2019-12-16 20:33:16,318 DEBUG (BusinessSubService.java:20)- ################SUBSCRIBE######### message:{"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}, channel:ztxc:pub #############
2019-12-16 20:33:16,318 DEBUG (BusinessSubService.java:42)- 业务处理: {"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}
2019-12-16 20:33:21,312 DEBUG (BusinessSubService.java:20)- ################SUBSCRIBE######### message:{"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}, channel:ztxc:pub #############
2019-12-16 20:33:21,312 DEBUG (BusinessSubService.java:42)- 业务处理: {"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}
2019-12-16 20:33:26,315 DEBUG (BusinessSubService.java:20)- ################SUBSCRIBE######### message:{"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}, channel:ztxc:pub #############
2019-12-16 20:33:26,316 DEBUG (BusinessSubService.java:42)- 业务处理: {"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}
2019-12-16 20:33:31,318 DEBUG (BusinessSubService.java:20)- ################SUBSCRIBE######### message:{"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}, channel:ztxc:pub #############
2019-12-16 20:33:31,319 DEBUG (BusinessSubService.java:42)- 业务处理: {"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}
2019-12-16 20:33:36,313 DEBUG (BusinessSubService.java:20)- ################SUBSCRIBE######### message:{"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}, channel:ztxc:pub #############
2019-12-16 20:33:36,313 DEBUG (BusinessSubService.java:42)- 业务处理: {"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}
2019-12-16 20:33:41,300 DEBUG (BusinessSubService.java:20)- ################SUBSCRIBE######### message:{"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}, channel:ztxc:pub #############
2019-12-16 20:33:41,301 DEBUG (BusinessSubService.java:42)- 业务处理: {"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}
2019-12-16 20:33:46,312 DEBUG (BusinessSubService.java:20)- ################SUBSCRIBE######### message:{"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}, channel:ztxc:pub #############
2019-12-16 20:33:46,312 DEBUG (BusinessSubService.java:42)- 业务处理: {"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}
2019-12-16 20:33:51,314 DEBUG (BusinessSubService.java:20)- ################SUBSCRIBE######### message:{"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}, channel:ztxc:pub #############
2019-12-16 20:33:51,315 DEBUG (BusinessSubService.java:42)- 业务处理: {"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}
2019-12-16 20:33:56,336 DEBUG (BusinessSubService.java:20)- ################SUBSCRIBE######### message:{"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}, channel:ztxc:pub #############
2019-12-16 20:33:56,336 DEBUG (BusinessSubService.java:42)- 业务处理: {"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}
2019-12-16 20:34:01,320 DEBUG (BusinessSubService.java:20)- ################SUBSCRIBE######### message:{"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}, channel:ztxc:pub #############
2019-12-16 20:34:01,321 DEBUG (BusinessSubService.java:42)- 业务处理: {"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}
2019-12-16 20:34:06,321 DEBUG (BusinessSubService.java:20)- ################SUBSCRIBE######### message:{"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}, channel:ztxc:pub #############
2019-12-16 20:34:06,321 DEBUG (BusinessSubService.java:42)- 业务处理: {"vid":"k123456","address":"山东省济南市","carNum":"123456","time":"2019-12-10"}