package com.github.techrobby.SimplePubSub; import java.util.Random; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class PubsubTest { private static final String TOPIC_FOOD = "tf"; private static final String TOPIC_ELECTRONICS = "te"; private static final String TOPIC_COMMERCE = "tc"; private static Pubsub pubsub = Pubsub.getInstance(); public static class FoodSubscriber implements Pubsub.Listener { //FoodSubscriber订阅了TOPIC_FOOD这个主题 public void subscribe() { pubsub.addListener(TOPIC_FOOD, this); } //当TOPIC_FOOD这种类型的事件到来时,FoodSubscriber订阅者就会收到消息 @Override public void onEventReceived(String type, Object object) { if (TOPIC_FOOD.equals(type)) { System.out.println("FS-TOPIC_FOOD-" + (String) object); } } } public static class ElectronicsSubscriber implements Pubsub.Listener { public void subscribe() { pubsub.addListener(TOPIC_ELECTRONICS, this); } @Override public void onEventReceived(String type, Object object) { if (TOPIC_ELECTRONICS.equals(type)) { System.out.println("ES-TOPIC_ELECTRONICS-" + (String) object); } } } public static class GeneralSubscriber implements Pubsub.Listener { public void subscribe() { pubsub.addListener(TOPIC_ELECTRONICS, this); pubsub.addListener(TOPIC_COMMERCE, this); pubsub.addListener(TOPIC_FOOD, this); } @Override public void onEventReceived(String type, Object object) { if (TOPIC_COMMERCE.equals(type)) { System.out.println("GS-TOPIC_COMMERCE-" + (String) object); } else if (TOPIC_ELECTRONICS.equals(type)) { System.out.println("GS-TOPIC_ELECTRONICS-" + (String) object); } else if (TOPIC_FOOD.equals(type)) { System.out.println("GS-TOPIC_FOOD-" + (String) object); } } } public static void main(String[] args) { //订阅消息 FoodSubscriber fs = new FoodSubscriber(); ElectronicsSubscriber es = new ElectronicsSubscriber(); GeneralSubscriber gs = new GeneralSubscriber(); fs.subscribe(); es.subscribe(); gs.subscribe(); //发布消息 int numThreads = 10; ExecutorService ex = Executors.newFixedThreadPool(numThreads); for (int i = 0; i < numThreads; i++) { ex.execute(new Runnable() { @Override public void run() { Random r = new Random(); for (int j = 0; j < 10; j++) { int val = r.nextInt(4); String topic = getRandomTopic(val); //随机产生一个topic,并往这个topic发送一条消息. pubsub.publish(topic, topic + "-" + j); } } }); } ex.shutdown(); } private static String getRandomTopic(int i) { if (i == 0) return TOPIC_COMMERCE; else if (i == 1) return TOPIC_ELECTRONICS; else return TOPIC_FOOD; } }