springboot 2.xredis実装メッセージキュー

2574 ワード

 


一.共通メッセージキューツール


  現在よく使われているメッセージキューには、RabbitMQなどのAMQPシリーズ、Kafka、Redisなどのkev valueシリーズの3種類があり、それらの使用シーンはそれぞれ 1.RabbitMQ:データの非同期処理タスクのシリアル実行など、比較的重量級が高い同時の場合.    2.Kafka:Pullのモードに基づいて処理して、具体的にとても高いスループット、一般的にログの記憶と収集を行います.    3.Redis:軽量レベルの高同時性、リアルタイム性の要求が高い場合、例えばキャッシュ、秒殺、タイムリーなデータ分析
 

2.SpringBoot Redisベースの統合メッセージチーム


1.メッセージの発行:redisTemplateを使用する.convertAndSend

@RestController
@RequestMapping
public class PublisherController {

    @Autowired
	private RedisTemplate redisTemplate;

    @GetMapping(value = "pub/{msg}")
    public String pubMsg(@PathVariable String msg){
        redisTemplate.convertAndSend("demochannel",id);
        return msg;
    }
}

 
2.メッセージ購読
package com.cxm.consumer;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.listener.PatternTopic;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.data.redis.listener.adapter.MessageListenerAdapter;


@Configuration
public class RedisSubConfig {

	/**
	 *       
	 *
	 * @param connectionFactory
	 * @param adapter
	 * @return
	 */
	@Bean
	public RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
			MessageListenerAdapter adapter) {
		RedisMessageListenerContainer container = new RedisMessageListenerContainer();
		container.setConnectionFactory(connectionFactory);
		//     channel
		container.addMessageListener(adapter, new PatternTopic("demochannel"));
		return container;
	}

	/**
	 * 	               
	 * @param message
	 * @return
	 */
	@Bean
	public MessageListenerAdapter adapter(RedisMessageListener message) {
		// onMessage   RedisMessage         ,       RedisMessage             
		return new MessageListenerAdapter(message, "onMessage");
	}

}

MessageListener
@Component
public class RedisMessageListener implements MessageListener {

	@Autowired
	private RedisTemplate redisTemplate;
	
	@Override
	public void onMessage(Message message, byte[] pattern) {
		RedisSerializer serializer = redisTemplate.getStringSerializer();
		String msg = serializer.deserialize(message.getBody());
		System.out.println("       :" + msg);
	}

}