11.9

头像
木木
    阅读 2 分钟

    rabbitmq六种模式

    image.png
    image.png
    发送消息的程序就是生产者
    队列就代表一个邮箱。
    消费者等待从队列接收消息
    ConnectionFactory f = new ConnectionFactory();

        f.setHost("192.168.64.140");
        f.setPort(5672);//可选,5672是默认端口
        f.setUsername("admin");
        f.setPassword("admin");

    工作模式

    image.png
    image.png
    一个生产者,两个消费者
    rabbitmq在所有消费者中轮询分发消息,把消息均匀地发送给所有消费者

    合理的分发

    abbitmq会一次把多个消息分发给消费者, 这样可能造成有的消费者非常繁忙, 而其它消费者空闲. 而rabbitmq对此一无所知, 仍然会均匀的分发消息

    我们可以使用 basicQos(1) 方法, 这告诉rabbitmq一次只向消费者发送一条消息, 在返回确认回执前, 不要向消费者发送新消息. 而是把消息发给下一个空闲的消费者

    消息持久化

    当rabbitmq关闭时, 我们队列中的消息仍然会丢失, 除非明确要求它不要丢失数据

    要求rabbitmq不丢失数据要做如下两点: 把队列和消息都设置为可持久化(durable)

    队列设置为可持久化, 可以在定义队列时指定参数durable为true

    第二个参数是持久化参数durable

    ch.queueDeclare("helloworld", true, false, false, null);

    发布和订阅模式

    image.png
    image.png
    我们将做一些完全不同的事情——我们将向多个消费者传递同一条消息。这种模式称为“发布/订阅”。

    Exchanges交换机

    RabbitMQ消息传递模型的核心思想是,生产者永远不会将任何消息直接发送到队列。实际上,通常生产者甚至不知道消息是否会被传递到任何队列。
    有几种可用的交换类型:direct、topic、header和fanout。我们将关注最后一个——fanout。让我们创建一个这种类型的交换机,并称之为 logs: ch.exchangeDeclare("logs", "fanout");

    自动生成队列名
    非持久,独占,自动删除
    String queueName = ch.queueDeclare().getQueue();

    4.路由模式

    image.png
    image.png


    木木
    1 声望0 粉丝

    « 上一篇
    11.3
    下一篇 »
    11.12

    引用和评论

    0 条评论