SpringBoot統合Redisメッセージ購読パブリケーション
4948 ワード
文書ディレクトリ SpringBoot統合Redisメッセージ購読発行 1. pom.xmlファイル追加依存 2. Redisメッセージ受信機 を作成する 3. リスナーを登録し、メッセージを送信する SpringBoot統合Redisメッセージ購読パブリケーション
1. pom.xmlファイル依存性の追加
2.Redisメッセージ受信機の作成
Receiverメッセージを受信する方法を定義するクラスです.このクラスをメッセージリスナーとして登録すると、メッセージ受信のメソッド名をカスタマイズできます.この例では、メッセージを受信する方法として「receiveMessage」を用いる.
3.リスナーを登録し、メッセージを送信
Spring Data Redisは、Redisを使用してメッセージを送信および受信するすべてのコンポーネントを提供します.以下の構成を行う必要があります. Redis接続ファクトリ(A connection factory) メッセージリスナーのコンテナ(A message listener container) Redisテンプレート(A redis template) Redis templateを使用してメッセージを送信し、Receiverクラスをメッセージリスナーとして登録してメッセージを受信できるようにします.Connection factoryは、Redisサービスへの接続を許可します.この例ではSpringBootのデフォルトのRedisConnectionFactoryを使用します.これはjedis Redisライブラリに基づくJedisConnectionFactoryの例です.メッセージリスナーとredisテンプレートに注入されます.
SpringBoot起動クラスを作成し、この例に必要なオブジェクトインスタンスを注入します.
この例ではCountDownLatch latchの目的がよく分からないが,テスト中にこのコードを付けると例外が投げ出されるが,メッセージの送信と受信は成功した.例外情報は次のとおりです.
このコードを注釈すると、例外もメッセージを表示します.同時に、メッセージのパブリケーションと受信にも影響しません.CountDownLatchは同期の補助クラスにすぎず、テスト中、このクラスがテスト結果に役立つことは発見されなかった.
参照リンク:https://spring.io/guides/gs/messaging-redis/ソースリンク:https://github.com/myNameIssls/springboot-study
1. pom.xmlファイル依存性の追加
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-data-redis
2.Redisメッセージ受信機の作成
package cn.tyrone.springboot.redis.message;
import java.util.concurrent.CountDownLatch;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
public class Receiver {
private static final Logger LOGGER = LoggerFactory.getLogger(Receiver.class);
private CountDownLatch latch;
@Autowired
public Receiver(CountDownLatch latch) {
this.latch = latch;
}
public void receiveMessage(String message) {
LOGGER.info("Received ");
latch.countDown();
}
}
Receiverメッセージを受信する方法を定義するクラスです.このクラスをメッセージリスナーとして登録すると、メッセージ受信のメソッド名をカスタマイズできます.この例では、メッセージを受信する方法として「receiveMessage」を用いる.
3.リスナーを登録し、メッセージを送信
Spring Data Redisは、Redisを使用してメッセージを送信および受信するすべてのコンポーネントを提供します.以下の構成を行う必要があります.
SpringBoot起動クラスを作成し、この例に必要なオブジェクトインスタンスを注入します.
package cn.tyrone.springboot.redis.message;
import java.util.concurrent.CountDownLatch;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.listener.PatternTopic;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.data.redis.listener.adapter.MessageListenerAdapter;
//https://spring.io/guides/gs/messaging-redis/
@SpringBootApplication
public class Application {
public static final Logger LOGGER = LoggerFactory.getLogger(Application.class);
/*
* Redis
* RedisConnectionFactory
*/
@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
MessageListenerAdapter listenerAdapter){
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.addMessageListener(listenerAdapter, new PatternTopic("sprinboot-redis-messaage"));
return container;
}
/*
* Receiver , (receiveMessage)
* , Receiver handleMessage
*/
@Bean
MessageListenerAdapter listenerAdapter(Receiver receiver){
return new MessageListenerAdapter(receiver, "receiveMessage");
}
/*
* Receiver
*/
@Bean
Receiver receiver(CountDownLatch latch){
return new Receiver(latch);
}
@Bean
CountDownLatch latch(){
return new CountDownLatch(1);
}
/*
* Redis Template
*/
@Bean
StringRedisTemplate template(RedisConnectionFactory connectionFactory){
return new StringRedisTemplate(connectionFactory);
}
/*
*
*/
public static void main(String[] args) throws Exception {
ApplicationContext ctx = SpringApplication.run(Application.class, args);
StringRedisTemplate template = ctx.getBean(StringRedisTemplate.class);
// CountDownLatch latch = ctx.getBean(CountDownLatch.class);
LOGGER.info("Sending message......");
template.convertAndSend("sprinboot-redis-messaage", "Hello, SpringBoot redis message!!!!");
// latch.wait();
System.exit(0);
}
}
この例ではCountDownLatch latchの目的がよく分からないが,テスト中にこのコードを付けると例外が投げ出されるが,メッセージの送信と受信は成功した.例外情報は次のとおりです.
2017-07-20 10:14:50.909 INFO 7200 --- [ main] c.t.s.redis.message.Application : Sending message......
Exception in thread "main" java.lang.IllegalMonitorStateException
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:502)
at cn.tyrone.springboot.redis.message.Application.main(Application.java:77)
このコードを注釈すると、例外もメッセージを表示します.同時に、メッセージのパブリケーションと受信にも影響しません.CountDownLatchは同期の補助クラスにすぎず、テスト中、このクラスがテスト結果に役立つことは発見されなかった.
参照リンク:https://spring.io/guides/gs/messaging-redis/ソースリンク:https://github.com/myNameIssls/springboot-study