订阅与发布的实现与应用

每次学习新东西,接触新领域的时候,常常会想学了后能应用到什么地方。用了它能改善什么东西,为什么非他不可?

1.订阅与发布是啥:我个人的理解是:你关注了某个人,他发了一条信息,你能马上知道。

知道了是啥,有哪些技术能实现我需要的这种功能呢:脑海里,网上搜索一番,发现类似的开源产品还是很多的。譬如:Redis,ActiveMQ,RabbitMQ等等。

先来说说理论上的的实现:以Redis为例:java来实现。

第一步:订阅频道:继承JedisPubSub,重写其下的多个方法:然后写个主方法去订阅:

public class PubRedis extends JedisPubSub{
	@Override
    public  void onMessage(String channel, String message) {
	    System.out.println("消息: 来自频道["+channel+"], 的消息:["+message+"]");
    }

 

    @Override
    public void onPMessage(String pattern, String channel, String message) {
    	System.out.println("模式:"+pattern);
    	System.out.println("频道:"+channel);
    	System.out.println("消息:"+message);
    }

 

    @Override
    public void onSubscribe(String channel,int subscribedChannels) {
        System.out.println("onSubscribe: channel["+channel+"],"+
                                                "subscribedChannels["+subscribedChannels+"]");
    }

 

    @Override

    public void onUnsubscribe(String channel,int subscribedChannels) {
        System.out.println("onUnsubscribe: channel["+channel+"], "+

                                               "subscribedChannels["+subscribedChannels+"]");
    }

 

    @Override

    public void onPUnsubscribe(String pattern,int subscribedChannels) {
        System.out.println("onPUnsubscribe: pattern["+pattern+"],"+
                                               "subscribedChannels["+subscribedChannels+"]");
    }

 

    @Override

    public void onPSubscribe(String pattern,int subscribedChannels) {
        System.out.println("onPSubscribe: pattern["+pattern+"], "+

                                               "subscribedChannels["+subscribedChannels+"]");
    }
	public static void main(String[] args) {
        Jedis jr = null;
        try {
            jr = new Jedis("localhost", 6379, 0);//redis服务地址和端口号
            PubRedis sp = new PubRedis();
            sp.proceed(jr.getClient(),"news.share", "news.blog");   //订阅了"news.share", "news.blog"两个频道
            //sp.proceedWithPatterns(jr.getClient(), "news.*");

        } catch (Exception e) {
            e.printStackTrace();
        }
        finally{
            if(jr!=null){
                jr.disconnect();
            }
        }
    }

}

订阅完后写个发布的类:让某个频道发布消息,那么订阅了该频道的,将收到消息:

public class PublishMasage {
public static void main(String str[])
{
	 Jedis jr = null;
     try {
         jr = new Jedis("localhost", 6379, 0);//redis服务地址和端口号
         jr.publish("news.blog", "发一条只有1和2都有的");
     } catch (Exception e) {
         e.printStackTrace();
     }

     finally{
         if(jr!=null){
             jr.disconnect();
         }

     }
}
}
这边是一个大致机制的一种实现。




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值