操作RabbitMQ完成消息通知,NIO、IO、netty基本分析

将等候通知的消息从 tb_notice_fresh 转移到RabbitMQ中
//subscribe订阅通知
    //1 创建Rabbit管理器
        RabbitAdmin rabbitAdmin = new RabbitAdmin(rabbitTemplate.getConnectionFactory());

        //2 声明Direct类型交换机,处理新增文章消息
        DirectExchange exchange = new DirectExchange("article_subscribe");
        rabbitAdmin.declareExchange(exchange);

        //3 创建队列,每个用户都有自己的队列,通过用户id进行区分
        Queue queue = new Queue("article_subscribe_" + userId, true);

        //4 声明交换机和队列的绑定关系,需要确保队列只收到对应作者的新增文章消息
        // 通过路由键进行绑定作者,队列只收到绑定作者的文章消息。
        //第一个是队列,第二个是交换机,第三个是路由键作者id
        Binding binding = BindingBuilder.bind(queue).to(exchange).with(authorId);


     //1. 如果订阅,声明要绑定的队列
         rabbitAdmin.declareQueue(queue);
         // 添加绑定关系
         rabbitAdmin.declareBinding(binding);

     //2. 如果取消订阅,删除队列绑定关系
         rabbitAdmin.removeBinding(binding);

//save添加文章群发通知

    /发消息给RabbitMQ,就是新消息的通知
        //第一个参数是交换机名,使用之前完成的订阅功能的交换机
        //第二个参数是路由键,使用时文章作者的id作为路由键  --  作者id = userId, 
        //第三个参数是消息内容,这里只完成新消息提醒,内容是文章id
        rabbitTemplate.convertAndSend("article_subscribe", userId, id);
 
一、IO编程  : 数据读写以字节流为单位,效率不高 - byte
    传统IO模型中,每个连接创建成功之后都需要一个线程来维护,每个线程包含一个while死循环。 若用户数量较多,服务端可能需要支撑成千上万的连接,IO模型可能就不太适合了

二:NIO  new-IO或non-blocking-IO,非阻塞IO
    新来的连接不再创建一个新的线程,而是可以把这条连接直接绑定到某个固定的线程,然后这条连接所有的读写都由这个线程来负责

    通道(channel):双向(Stream单向,读写分离)
    缓冲(buffer):理解成一块内存区域,可以写入数据,并在之后读取它
    选择器(selector):多个连接注册到一个选择器处理,一个线程监测多个注册在它上面的信道,通过一定的选择机制,实现多路复用的效果
    
    引入了IO多路复用器selector,selector是一个提供channel注册服务的线程,可以同时对接多个channnl,并在线程池中为channel适配、选择合适的线程来处理channel。由于NIO模型中线程数量大大降低,线程切换效率因此也大幅度提高

三、netty - 推荐
    已经由NIO能够提高程序效率了,为什么还要使用netty? 简单说法:netty封装了JDK的NIO,让你用的更爽,你不用再写一大堆复杂的代码了;官方说法:netty是一个异步事件驱动的网络应用框架,用于快速开发可维护的高性能服务器和客户端
    
    serverBootstarp :服务端
    Bootstarp :客户端
    channel
    EventLoop
    EventLoopGroup :(理解成  组、java中的线程池)
    ChannelHandler和ChannelPipeline
    ChannelInitializer
    ChannelFuture
    
四、websockek
    Socket


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值