Redis之訊息佇列
阿新 • • 發佈:2018-11-08
SpringBoot 結合redis實現訊息佇列功能
釋出者:
配置連線工廠
@Bean
public StringRedisTemplate template(RedisConnectionFactory connectionFactory){
return new StringRedisTemplate(connectionFactory);
}
配置Redis template
@Autowired private StringRedisTemplate stringRedisTemplate; public void sendMessage(Object message) { stringRedisTemplate.convertAndSend(this.productActiveMQQueue,"傳送新訊息"); }
訂閱者:
建立連線工廠
繫結訊息監聽者和接收監聽的方法
註冊訂閱者
計數器,控制執行緒
@Configuration public class SubscriberConfig { //建立連線工廠 @Bean public RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory, MessageListenerAdapter listenerAdapter){ RedisMessageListenerContainer container = new RedisMessageListenerContainer(); container.setConnectionFactory(connectionFactory); container.addMessageListener(listenerAdapter,new PatternTopic("phone")); //監聽phone的訂閱者 return container; } //繫結監聽者和監聽方法 @Bean public MessageListenerAdapter listenerAdapter(Receiver receiver){ return new MessageListenerAdapter(receiver,"receiveMessage"); //這裡選擇指定的MessageListener和指定的處理方法 } //計數器 @Bean public CountDownLatch latch(){ return new CountDownLatch(1);//指定了計數的次數 1 } }
可以根據型別 多用幾個類 繼承MessageListener 重寫onMessage() 來解析不同型別的訊息
即產生不同的訂閱者
public class Receiver implements MessageListener { private CountDownLatch id; public Receiver(CountDownLatch id) { this.id=id; } public void onMessage(Message message) { //這裡我們知道生產者傳送的就是一個純文字訊息,所以這裡可以直接進行強制轉換,或者直接把onMessage方法的引數改成Message的子類TextMessage TextMessage textMsg = (TextMessage) message; System.out.println("接收到一個純文字訊息。"); try { System.out.println("訊息內容是:" + textMsg.getText()); } catch (JMSException e) { e.printStackTrace(); } } }
redis相對於ActiveMQ (入隊時資料較大時,redis效能較弱)
入隊時,當資料比較小時Redis的效能要高於ActiveMQ,而如果資料大小超過了10K,Redis則慢的無法忍受;
出隊時,無論資料大小,Redis都表現出非常好的效能,而ActiveMQ的出隊效能則遠低於Redis。