zoukankan      html  css  js  c++  java
  • Java操作队列

    Java操作队列

    常见的几种模式:

     

    1 简单队列simple

    模型:(p + 队列 + c)

    P:生产者producer,将消息发送到队列

    红色:消息队列

    C:消费者consumer,从队列消费消息

     

    生产真的速度一般大于消费者的速度(因为消费者需要和业务计算相结合)

    创建maven工程

    导入pomjar文件

     

    步骤:

    a:获取MQ链接的工具类

     

    创建生产者类发送消息:

    再回到web控制台可以看到刚才的操作:

     

    C: 创建一个消费者类消费消息

    用的是旧的版本的(3.4)队列API

     

    用最新的队列API(基于事件的监听):

     

     

     

    2 工作队列work    queue

    一个生产者对应多个消费者!

     

    轮询分发(round ribon)

    编写生产者类生产50条信息:

     

     

    消费者1消费消息:

     

    消费者2消费消息:

    修改睡眠时间为1000ms.

     

    结果会看到消费者1和2都一人一个消息,均分消费了这50条消息。

    这个是Rabbitmq的轮询分发(round-robin)。

     

     

    公平分发(fair dipatch)

    关闭自动应答asc,改为手动

     

    修改生产者代码:

     

    修改消费者代码:

     

    运行的结果会看到睡眠2000ms的消费者消费的消息明显少于睡眠1000ms的消费者

     

     

    消息应答ack,和消息持久化durable

    消息应答主要是防止消费者挂了之后丢失数据。

     

    持久化durable:

     

    消息的持久化主要是为了防止rabbitmq服务器挂了之后消息丢失。

     

     

    3 订阅模式

     

    模型

    X:交换机,路由器。需要绑定到队列。


    交换机

     

     

     

    "":匿名转发。

    Fanout:不处理路由键

     

    代码用例

    编写生产者:

    运行之后可以在web控台看到多了一个exchange:

     

    创建消费者类:

    在web控制台可以见到

     

     

     

     

     

    4 Direct:处理路由键的模式

     

    代码用例 生产者:

     

     

    消费者1(单个路由key):

     

    消费者2(多个路由key):

     

    启动消费者1和2之后,再发送key为error的消息,消费者1和2都能消费该消息

     

    5 Topics 模式    

     

    将路由键和某种主题模式匹配(采用通配符的方式)

    #:匹配一个或者多个的情况(常用)

    *:匹配一个。(少用)

     

     

     

    代码用例:发布商品的增删改查

    生产者:

    消费者1:

     

    消费者2:

     

     

     

  • 相关阅读:
    关于MFC消息的总结
    关于VS中包含库、附加包含库、
    关于MFC中重载函数是否调用基类相对应函数的问题
    关于子窗口处理自身消息而不扩散给父窗口的问题
    进程与线程理解-1
    程序设计思想-2
    线程与进程
    网路编程之socket与 socketserver、黏包
    网络编程之TCP协议与UDP协议
    网络编程基础
  • 原文地址:https://www.cnblogs.com/domi22/p/9096005.html
Copyright © 2011-2022 走看看