Redis購読リリースJedis実現方法


Redisを使った購読発表モードは、押し付け問題を解決するためのものだと思います。
概念的な叙述については、多かれ少なかれ言及します。
Redisが購読しているのは何ですか?Redisが購読するのはメッセージ通信モードであり、送信者はチャネルAを介してメッセージメッセージメッセージメッセージメッセージメッセージを送信し、チャネルAを購読したクライアントはメッセージメッセージメッセージメッセージメッセージメッセージメッセージメッセージメッセージメッセージメッセージを受信することができる。えっと、上の説明は私が言ったよりずっとよくなりました。つまり、私が理解しているのは、いわゆる購読発表モードというのは、実は私たちがテレビを見たり、ラジオを聞いたりするのと同じです。私たちがチャンネルを変えたりしていない時にも、そのチャンネルはニュースを伝えています。私たちはそのチャンネルに換えればメッセージを受信することができます。はい、ちょっと不適切かもしれませんが。
説明
本明細書では例示的に三つのクライアントが採用され、「品」の字形で並べられ、上から下まで左から右にそれぞれクライアント1(c 1)、クライアント2(c 2)、クライアント3(c 3)である。ここで説明する。
Redis購読とコマンドの発行
まず、Redisサーバの構築作業について、自ら関連資料を見て環境整備を行ってください。
Redisではリリースと購読は簡単な6つのコマンドしかないと聞きました。すなわち、
PSUBSCRIBE pattern[pattern...]
一つ以上のチャンネルを購読してください。
PUBLISHちゃんねるメッセージ
chanelに発表します。
PUBSUB subcommand[argment[argment...]
購読とリリースシステムの状態を表示します。
PUNSUBSCRIBE[pattern...]
フォーマットに合ったチャンネルを全部キャンセルします。
SUBSCRIBE chanel[chanel...]
1つ以上のチャンネルを購読します。
UNSUBSCRIBE[chanel[chanel...]
チャンネルの購読をキャンセルします
例1-SUBSCRIBE
redisを接続してコマンドを入力します。

SUBSCRIBE study
これでstudyというチャンネルを購読しました。
これからstudyチャンネルでメッセージを送ります。~~
例2-PUBLISH
もう一つのクライアントを開きます。私が使っているのは品番レイアウトの一番上の方のものです。

PUBLISH study "message1-go go go"
クライアント1がstudyチャンネルでメッセージを発行すると、クライアント2(購読済みstudyチャンネル)は、c 1が発行したメッセージを受信することができ、クライアント3は、studyチャンネルを購読していないため、c 1が送信したメッセージを受信できないことが分かる。
例3-PSUBSCRIBE
今、ブロガーの左手に沿って、右手がゆっくりと動きます。c 3に入力する

PSUBSCRIBE study*
OKです。今はc 1に入力します。

PUBLISH study "message2"
上の結果図:
c 3はワイルドカード形式で、studyチャンネルも購読に成功しました。
次に、c 1にコマンドを入力し続けます。

PUBLISH study:java "I hate java forever"
pspubscribeを使ってstudyチャンネルを購読しただけでなく、studyをはじめとするチャンネルも購読したと見られます。
例4-PUBSUB
c 1にpbsub chanelを入力すると、次のようになります。

127.0.0.1:6379> PUBSUB channels

1) "study"
現在活躍しているチャンネルを意味します。
Jedisは購読者モードを実現します。
はい、上のコマンドラインを通じてRedisの中で購読発表者モードに関するコマンドを熟知しました。私たちはredisの購読と発表者をプロジェクトに埋め込みます。
まず、私たちはjedisを使ってまず「study」というチャンネルを予約します。
まずコマンドラインからメッセージを発表します。
その後、私たちはジェームズを使ってプロジェクトでメッセージを発表します。
正常な通信ができます。
コアコード:
PublishMessage.javaはメッセージを発表するスレッドを開くために使用されます。

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();
}
ChtSubscribe.javaは購読関連イベントを処理します。JedisPbSubから継承します。

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は購読して発表します。Jedisの実現方法は小編が皆さんに提供した内容を全部共有しました。参考にしていただければと思います。よろしくお願いします。