redis消息队列适合轻量级高并发的情况,比如秒杀,及时数据分析等。
首先springboot配置文件配置如下:
spring: redis: database: 1 host: 192.168.94.151 port: 6379 password: xuhaixing jedis: pool: max-idle: 8 min-idle: 0 max-active: 8 max-wait: -1 timeout: 5000 server: port: 8081
注册StringRedisTemplate
/** * 注册redisTemplate,作为消息队列的发布者 */ @Configuration public class PublisherConfig { @Bean public StringRedisTemplate getRedisTemplate(RedisConnectionFactory redisConnectionFactory) { return new StringRedisTemplate(redisConnectionFactory); } }
消息生产者,注入redisTemplate,用convertAndSend发送消息
@Service public class PublisherService { @Autowired private StringRedisTemplate redisTemplate; public String sendMessage(String name) { try { redisTemplate.convertAndSend("TOPIC_USERNAME", name); return "消息发送成功了"; } catch (Exception e) { e.printStackTrace(); return "消息发送失败了"; } } }
在controller中注入service,请求时发送消息
@RestController @RequestMapping("publisher") public class PublisherController { @Autowired private PublisherService publisherService; @RequestMapping("{name}") public String sendMessage(@PathVariable("name") String name) { return publisherService.sendMessage(name); } }
消费者:创建一个接收消息的类,继承MessageListener,也可以不继承
继承:
@Component public class Receiver implements MessageListener { private static Logger logger = LoggerFactory.getLogger(Receiver.class); @Autowired private StringRedisTemplate redisTemplate; @Override public void onMessage(Message message, byte[] pattern) { RedisSerializer<String> valueSerializer = redisTemplate.getStringSerializer(); String deserialize = valueSerializer.deserialize(message.getBody()); logger.info("收到的mq消息" + deserialize); } }
不继承:
@Component public class Receiver { private static Logger logger = LoggerFactory.getLogger(Receiver.class); public void receiveMessage(String message) { logger.info("收到的mq消息" + message); } }
扫描二维码关注公众号,回复:
1479802 查看本文章
消息订阅者配置类:
@Configuration @AutoConfigureAfter({Receiver.class}) public class SubscriberConfig { /** * 消息监听适配器,注入接受消息方法,输入方法名字 反射方法 * * @param receiver * @return */ @Bean public MessageListenerAdapter getMessageListenerAdapter(Receiver receiver) { return new MessageListenerAdapter(receiver, "receiveMessage"); //当没有继承MessageListener时需要写方法名字 } /** * 创建消息监听容器 * * @param redisConnectionFactory * @param messageListenerAdapter * @return */ @Bean public RedisMessageListenerContainer getRedisMessageListenerContainer(RedisConnectionFactory redisConnectionFactory, MessageListenerAdapter messageListenerAdapter) { RedisMessageListenerContainer redisMessageListenerContainer = new RedisMessageListenerContainer(); redisMessageListenerContainer.setConnectionFactory(redisConnectionFactory); redisMessageListenerContainer.addMessageListener(messageListenerAdapter, new PatternTopic("TOPIC_USERNAME")); return redisMessageListenerContainer; } }
消费者和生产者配置已经完成了,启动springboot程序,用postman请求controller方法就可以了。