Computer >> Máy Tính >  >> Lập trình >> Redis

Redis Jedis pub sub- Cách triển khai hệ thống pub / sub bằng thư viện jedis

Trong hướng dẫn này, chúng ta sẽ tìm hiểu về cách triển khai hệ thống con redis pub bằng cách sử dụng thư viện Jedis.

Thư viện Jedis

Jedis là một thư viện máy khách Java cho kho dữ liệu redis. Nó nhỏ và rất dễ sử dụng, và hoàn toàn tương thích với kho dữ liệu redis 2.8.x, 3.x.x trở lên. Bạn có thể tìm thêm thông tin về thư viện jedis tại đây.

Redis Pub / Sub System

Redis triển khai mô hình nhắn tin Đăng / Đăng ký. Theo mô hình nhắn tin này, người gửi (người phát hành) tin nhắn không được lập trình để gửi tin nhắn của họ trực tiếp đến một người nhận (thuê bao) cụ thể. Họ gửi (xuất bản) thông điệp của họ đến một kênh cụ thể mà không biết kênh đó hoặc liệu người nhận có sử dụng thông điệp đó hay không. Người nhận, người muốn sử dụng thông điệp bày tỏ sự quan tâm của họ bằng cách đăng ký một hoặc nhiều kênh và họ sẽ nhận được thông báo chỉ được xuất bản đến các kênh đó mà không cần biết người gửi đã gửi tin nhắn nào. Bạn có thể tìm thêm thông tin về hệ thống Redis Pub / Sub tại đây.

Thiết lập dự án

Tạo một dự án maven đơn giản trong IDE yêu thích của bạn và thêm phần phụ thuộc được đề cập bên dưới vào pom.xml của bạn tệp.

<dependency>
  <groupId>redis.clients</groupId>
  <artifactId>jedis</artifactId>
  <version>3.0.1</version>
</dependency>

Để biết phiên bản mới nhất của thư viện jedis, hãy xem trang này.

Cài đặt Redis

Bạn sẽ cần cài đặt phiên bản Redis mới nhất. Kiểm tra trang này để biết thêm thông tin về cài đặt redis.

Kết nối Jedis

Tạo một đối tượng của Jedis ( redis.clients.jedis.Jedis ) để kết nối mã java của bạn với redis.

Jedis jedis = new Jedis();

Nếu bạn đã bắt đầu một dịch vụ redis trong máy cục bộ của mình và trên cổng mặc định (6379) thì hàm tạo mặc định sẽ hoạt động tốt. Nếu không, bạn phải chuyển đúng url máy chủ và số cổng. như một đối số trong hàm tạo.

Đăng ký kênh

Tạo một lớp học “ChannelSubscribe” , Lớp này sẽ đăng ký kênh C1 và C2 bằng cách tạo một máy khách. Ứng dụng khách này sẽ nhận được thông báo khi bất kỳ ứng dụng khách nào khác xuất bản thông báo lên kênh C1 hoặc kênh C2.

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;

public class ChannelSubscribe {

  public static void main(String[] args) {
		
    Jedis jedis = null;

    try {
			
	/* Creating Jedis object for connecting with redis server */
	jedis = new Jedis();
		
	/* Creating JedisPubSub object for subscribing with channels */	
	JedisPubSub jedisPubSub = new JedisPubSub() {
				
		@Override
		public void onMessage(String channel, String message) {
			System.out.println("Channel " + channel + " has sent a message : " + message );
			if(channel.equals("C1")) {
				/* Unsubscribe from channel C1 after first message is received. */	
				unsubscribe(channel);
			}
		}
				
		@Override
		public void onSubscribe(String channel, int subscribedChannels) {
			System.out.println("Client is Subscribed to channel : "+ channel);
			System.out.println("Client is Subscribed to "+ subscribedChannels + " no. of channels");
		}
			
		@Override
		public void onUnsubscribe(String channel, int subscribedChannels) {
			System.out.println("Client is Unsubscribed from channel : "+ channel);
			System.out.println("Client is Subscribed to "+ subscribedChannels + " no. of channels");
		}
			
	};
			
	/* Subscribing to channel C1 and C2 */
	jedis.subscribe(jedisPubSub, "C1", "C2");
			
	} catch(Exception ex) {			
			
		System.out.println("Exception : " + ex.getMessage());	
			
	} finally {
			
		if(jedis != null) {
			jedis.close();
		}
	}		
  }
}

Đầu ra

Khi bạn chạy một lớp học “ChannelSubscribe” , đầu ra sẽ như sau:-

Redis Jedis pub sub- Cách triển khai hệ thống pub / sub bằng thư viện jedis




Xuất bản lên kênh

Tạo một lớp học “ChannelPublish” , Lớp này sẽ kết nối với máy chủ redis bằng cách sử dụng kết nối jedis và sẽ xuất bản hai thông báo cho mỗi kênh C1 và C2.

import redis.clients.jedis.Jedis;

public class ChannelPublish {

  public static void main(String[] args) {
		
    Jedis jedis = null;
		
    try {			
        /* Creating Jedis object for connecting with redis server */
        jedis = new Jedis();
			
        /* Publishing message to channel C1 */
        jedis.publish("C1", "First message to channel C1");
			
        /* Publishing message to channel C2 */
        jedis.publish("C2", "First message to channel C2");
		
        /* Publishing message to channel C1 */
        jedis.publish("C1", "Second message to channel C1");
			
        /* Publishing message to channel C2 */
        jedis.publish("C2", "Second message to channel C2");
		
    } catch(Exception ex) {			
			
        System.out.println("Exception : " + ex.getMessage());
    } finally {
			
        if(jedis != null) {
          jedis.close();
        }		
    }
  }
}

Đầu ra

Khi bạn chạy một lớp học “ChannelPublish” , xuất trong ChannelSubscribe bảng điều khiển sẽ như sau:-

Redis Jedis pub sub- Cách triển khai hệ thống pub / sub bằng thư viện jedis

Đăng ký mẫu

Tạo một lớp “PatternSubscribe” , Lớp này sẽ đăng ký mẫu C * và D? bằng cách tạo một khách hàng.

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;

public class PatternSubscribe {

  public static void main(String[] args) {
		
	Jedis jedis = null;
	
	try {
			
	/* Creating Jedis object for connecting with redis server */
	jedis = new Jedis();
			
	/* Creating JedisPubSub object for subscribing with channels */	
	JedisPubSub jedisPubSub = new JedisPubSub() {
				
		@Override
		public void onPMessage(String pattern, String channel, String message) {
			System.out.println("Channel " +channel+ " has sent a message : " +message+ " on pattern " + pattern);
			if(pattern.equals("C*")) {
				/* Unsubscribe from pattern C* after first message is received. */	
				punsubscribe(pattern);
			}
		}
				
		@Override
		public void onPSubscribe(String pattern, int subscribedChannels) {
			System.out.println("Client is Subscribed to pattern : "+ pattern);
			System.out.println("Client is Subscribed to "+ subscribedChannels + " no. of patterns");
		}
				
		@Override
		public void onPUnsubscribe(String pattern, int subscribedChannels) {
			System.out.println("Client is Unsubscribed from pattern : "+ pattern);
			System.out.println("Client is Subscribed to "+ subscribedChannels + " no. of patterns");
		}
				
	};
			
	/* Subscribing to channel C1 and C2 */
	jedis.psubscribe(jedisPubSub, "C*", "D?");
			
	} catch(Exception ex) {			
			
		System.out.println("Exception : " + ex.getMessage());	
			
	} finally {
		
		if(jedis != null) {
			jedis.close();
		}
		
	}		
  }

}

Đầu ra

Khi bạn chạy một lớp “PatternSubscribe” , đầu ra sẽ như sau:-

Redis Jedis pub sub- Cách triển khai hệ thống pub / sub bằng thư viện jedis




Xuất bản lên các mẫu

Tạo một lớp “PatternPublish” , Lớp này sẽ kết nối với máy chủ redis bằng kết nối jedis và sẽ xuất bản thông báo tới kênh C13, D2, C134 và D3.

import redis.clients.jedis.Jedis;

public class PatternPublish {

  public static void main(String[] args) {
	
	Jedis jedis = null;
	
	try {			
	/* Creating Jedis object for connecting with redis server */
	jedis = new Jedis();
			
	/* Publishing message to channel C13 */
	jedis.publish("C13", "Message to channel C13");
	
	/* Publishing message to channel D2 */
	jedis.publish("D2", "Message to channel D2");
		
	/* Publishing message to channel C134 */
	jedis.publish("C134", "Message to channel C134");
			
	/* Publishing message to channel D3 */
	jedis.publish("D3", "Message to channel D3");
			
	} catch(Exception ex) {			
			
        	System.out.println("Exception : " + ex.getMessage());	
			
	} finally {
			
		if(jedis != null) {
			jedis.close();
		}
			
	}
  }
	
}

Đầu ra

Khi bạn chạy một lớp “PatternPublish” , xuất trong PatternSubscribe bảng điều khiển sẽ như sau:-

Redis Jedis pub sub- Cách triển khai hệ thống pub / sub bằng thư viện jedis

Tài liệu tham khảo:-

  1. Xuất bản Tài liệu Lệnh phụ

Đó là tất cả về cách triển khai hệ thống con redis pub bằng thư viện Jedis. Nếu bạn thích nó, hãy chia sẻ suy nghĩ của bạn trong phần bình luận và chia sẻ nó với những người khác.