> 데이터 베이스 > Redis > redis 게시 및 구독 기능

redis 게시 및 구독 기능

藏色散人
풀어 주다: 2019-09-27 09:22:59
앞으로
3308명이 탐색했습니다.

redis提供了简单的发布订阅功能,对于一些合适的场景(比如不要求消费者不在线时也能收到离线消息),比起专业的MQ来说,用起来更简单些。本文主要是记录下怎么在SpringBoot里头使用redis的发布订阅功能。

定义生产者

配置

@Bean
    MyPublisher redisPublisher(RedisConnectionFactory factory) {
        return new MyPublisher( redisTemplate(factory), topic() );
    }
    @Bean
    ChannelTopic topic() {
        return new ChannelTopic( "pubsub:queue" );
    }
로그인 후 복사

生产者实例

public class MyPublisher {
    private final RedisTemplate< String, Object > template;
    private final ChannelTopic topic;
    private final AtomicLong counter = new AtomicLong( 0 );
    public MyPublisher( final RedisTemplate< String, Object > template,
                               final ChannelTopic topic ) {
        this.template = template;
        this.topic = topic;
    }
    @Scheduled( fixedDelay = 100 )
    public void publish() {
        template.convertAndSend( topic.getTopic(), "Message " + counter.incrementAndGet() +
                ", " + Thread.currentThread().getName() );
    }
}
로그인 후 복사

定义消费者

配置

//subscribe
    @Bean
    MessageListenerAdapter messageListener() {
        return new MessageListenerAdapter( new MyMessageListener() );
    }
    @Bean
    RedisMessageListenerContainer redisContainer(RedisConnectionFactory factory) {
        final RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(factory);
        container.addMessageListener(messageListener(), topic());
        return container;
    }
로그인 후 복사

消费者实例

public class MyMessageListener implements MessageListener {
    @Override
    public void onMessage( final Message message, final byte[] pattern ) {
        System.out.println( "Message received: " + message.toString() );
    }
}
로그인 후 복사

运行

  .   ____          _            __ _ _
 /\\ / ___&#39;_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | &#39;_ | &#39;_| | &#39;_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  &#39;  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.3.2.RELEASE)
2016-02-16 00:14:08.190  INFO 1481 --- [           main] com.codecraft.RedisdemoApplication      : Starting RedisdemoApplication on Jupiter.local with PID 1481 (/Users/codecraft/workspace/redisdemo/target/classes started by codecraft in /Users/codecraft/workspace/redisdemo)
2016-02-16 00:14:08.193  INFO 1481 --- [           main] com.codecraft.RedisdemoApplication      : No active profile set, falling back to default profiles: default
2016-02-16 00:14:08.242  INFO 1481 --- [           main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@140e5a13: startup date [Tue Feb 16 00:14:08 CST 2016]; root of context hierarchy
2016-02-16 00:14:09.756  INFO 1481 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2016-02-16 00:14:09.763  INFO 1481 --- [           main] o.s.c.support.DefaultLifecycleProcessor  : Starting beans in phase 0
2016-02-16 00:14:09.807  INFO 1481 --- [           main] o.s.c.support.DefaultLifecycleProcessor  : Starting beans in phase 2147483647
2016-02-16 00:14:09.897  INFO 1481 --- [           main] com.codecraft.RedisdemoApplication      : Started RedisdemoApplication in 2.215 seconds (JVM running for 2.589)
Message received: "Message 1, pool-1-thread-1"
Message received: "Message 2, pool-1-thread-1"
Message received: "Message 3, pool-1-thread-1"
Message received: "Message 4, pool-1-thread-1"
Message received: "Message 5, pool-1-thread-1"
Message received: "Message 6, pool-1-thread-1"
Message received: "Message 7, pool-1-thread-1"
Message received: "Message 8, pool-1-thread-1"
Message received: "Message 9, pool-1-thread-1"
Message received: "Message 10, pool-1-thread-1"
로그인 후 복사

위 내용은 redis 게시 및 구독 기능의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:segmentfault.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿