Redis 구독 게시Jedis 실현 방법

레 디 스 구독 게시 모드 를 사용 하면 푸 시 문 제 를 해결 할 수 있 을 거 라 고 생각 합 니 다~
개념 적 인 서술 에 대해 많 고 적 음 은 언급 해 야 한다.
레 디 스 구독 은 무엇 입 니까?Redis 게시 구독 은 일종 의 메시지 통신 모드 로 발송 자가 채널 A 를 통 해 메시지 메 시 지 를 보 내 고 채널 A 를 구독 한 클 라 이언 트 가 메시지 메 시 지 를 받 을 수 있다.네,어머니 의 설명 은 제 가 말 한 것 보다 훨씬 좋 습 니 다.제 가 이해 하 는 것 은 바로 구독 발표 모델 입 니 다.사실은 우리 와 텔레비전 을 보고 방송 을 듣 는 것 과 차이 가 많 지 않 습 니 다.우리 가 채널 을 바 꾸 지 않 았 을 때 그 채널 도 소식 을 전달 하고 있 었 습 니 다.우 리 는 그 채널 로 바 꾸 면 소식 을 받 을 수 있다.네,좀 부적 절 할 수도 있 지만~
설명 하 다.
본 논문 에서 예 시 는 세 개의 클 라 이언 트 를 사용 하여'품'자형 으로 배열 하고 위 에서 아래로,왼쪽 에서 오른쪽으로 각각 클 라 이언 트 1(c1),클 라 이언 트 2(c2),클 라 이언 트 3(c3)이다.이에 대해 설명 한다.
Redis 구독 및 게시 명령
먼저,레 디 스 서버 구축 작업 에 대해 서 는 관련 자 료 를 조회 하여 환경 구조 조정 을 진행 하 시기 바 랍 니 다.
레 디 스에 서 게시 와 구독 은 간단 한 6 개의 명령 만 있다 고 합 니 다.즉:
PSUBSCRIBE pattern [pattern ...]
pattern 형식 에 맞 는 채널 을 하나 이상 구독 합 니 다.
PUBLISH channel message
chanel 에 게 메 시 지 를 보 냅 니 다.
PUBSUB subcommand [argument [argument ...]]
구독 및 게시 시스템 상태 보기
PUNSUBSCRIBE [pattern [pattern ...]]
형식 에 맞 는 모든 채널 을 취소 하 다.
SUBSCRIBE channel [channel ...]
하나 이상 의 채널 구독
UNSUBSCRIBE [channel [channel ...]]
채널 구독 취소
예 1-SUBSCRIBE
redis 연결 후 명령 입력

SUBSCRIBE study
이렇게 해서 스 터 디 라 는 채널 을 구독 했다.
이제 스 터 디 채널 에서 메 시 지 를 보 낼 거 야~~
예 2-PUBLISH
다른 클 라 이언 트 를 열 었 습 니 다.제 가 사용 하 는 것 은 품 자형 구조의 맨 위 에 있 는 것 을 발표 자로 하고 입력 하 는 것 입 니 다.

PUBLISH study "message1-go go go"
클 라 이언 트 1 이 study 채널 에서 메 시 지 를 발표 할 때 클 라 이언 트 2(study 채널 구독)는 c1 이 발표 한 메 시 지 를 받 을 수 있 고 클 라 이언 트 3 은 study 채널 을 구독 하지 않 아 c1 이 보 낸 메 시 지 를 받 지 못 하 는 것 을 볼 수 있 습 니 다.
예 3-PSUBSCRIBE
이제 블 로 거들 의 왼손,오른손 을 따라 천천히 움 직 여 라.c3 에 입력

PSUBSCRIBE study*
OK,현재 c1 에 입력

PUBLISH study "message2"
위의 결과 그림:
c3 에서 사용 하 는 마스크 형식 도 study 채널 을 구독 에 성공 했다.
다음 c1 에서 명령 을 계속 입력 하 십시오:

PUBLISH study:java "I hate java forever"
psubscribe 를 이용 해 스 터 디 채널 을 구독 할 뿐만 아니 라 스 터 디 를 비롯 한 채널 도 구독 하 는 것 을 볼 수 있다.
예 4-PUBSUB
c1 에 pubsub channel 을 입력 하면 획득 가능:

127.0.0.1:6379> PUBSUB channels

1) "study"
현재 활약 중인 채널 을 뜻한다.
Jedis 구독 게시 자 모드 구현
자,위 에서 명령 행 을 통 해 Redis 에서 구독 자 모드 에 관 한 명령 을 익 혔 습 니 다.다음은 redis 의 구독 과 게시 자 를 프로젝트 에 삽입 합 니 다.
우선,우 리 는 jedis 를 이용 하여 먼저'study'라 는 채널 을 구독 합 니 다.
그리고 우 리 는 먼저 명령 행 에서 소식 을 발표 합 니 다.
그 후에 저 희 는 jedis 를 사용 하여 프로젝트 에서 소식 을 발표 합 니 다.
우 리 는 정상 적 인 통신 을 할 수 있어~아 싸~
핵심 코드:
PublishMessage.자바 는 메 시 지 를 발표 하 는 스 레 드 를 여 는 데 사 용 됩 니 다.

private Logger logger = LoggerFactory.getLogger(PublishMessage.class);

@Resource
private JedisCluster jedisCluster;

/**
 *     
 *
 * @param channel   
 * @param message   
 */
public void sendMessage(final String channel, final String message) {
  Thread thread = new Thread(() -> {
    Long publish = jedisCluster.publish(channel, message);
    logger.info("    : {}       {} - {}", channel, message, publish);
  });
  logger.info("      :");
  thread.setName("publishThread");
  thread.start();
}
ChatSubscribe.java 는 구독 관련 이 벤트 를 처리 하 는 데 사 용 됩 니 다.

private Logger logger = LoggerFactory.getLogger(ChatSubscribe.class);

//            
@Override
public void onMessage(String channel, String message) {
  logger.info("    ,       :  -{},  -{}", channel, message);
  RedisString.message = message;
}

//                   
@Override
public void onPMessage(String pattern, String channel, String message) {
  System.out.println("-----                  -----");
  System.out.println(pattern + "=" + channel + "=" + message);
}

//                  
@Override
public void onPSubscribe(String pattern, int subscribedChannels) {
  System.out.println("-----                 -----");
  System.out.println(pattern + "=" + subscribedChannels);
}

//                 
@Override
public void onPUnsubscribe(String pattern, int subscribedChannels) {
  System.out.println("-----                -----");
  System.out.println(pattern + "=" + subscribedChannels);
}

@Override
public void onPong(String pattern) {
  super.onPong(pattern);
}

//           
@Override
public void onSubscribe(String channel, int subscribedChannels) {
  logger.info("       :  -{},    -{}", channel, subscribedChannels);
}

//          
@Override
public void onUnsubscribe(String channel, int subscribedChannels) {
  logger.info("       {}", channel);
}
SubScribeMessage.java 구독 채널 취소 등 액 션 클래스

private Logger logger = LoggerFactory.getLogger(SubScribeMessage.class);

private ExecutorService cachedThreadPool = Executors.newCachedThreadPool();

@Resource
private JedisCluster jedisCluster;
/**
   *     
   *
   * @param channel       
   * @param roomSubListerner
   */
  public void subscribeChannel(final String channel, final ChatSubscribe roomSubListerner) {

    cachedThreadPool.execute(new Runnable() {
      @Override
      public void run() {
        jedisCluster.subscribe(roomSubListerner, channel);
      }
    });
  }

jedisCluster       ,      ,       ,              ,         。

        tomcat 9.0 + spring + springmvc

     :@RestController,@GetMapping     ,    ,        spring    。
이상 이 Redis 구독 게시제 디 스 의 실현 방법 은 바로 편집장 님 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 께 참고 가 되 고 많은 응원 부 탁 드 리 겠 습 니 다.

좋은 웹페이지 즐겨찾기