`
piaoling
  • 浏览: 263092 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

rabbitMQ之发布/订阅

    博客分类:
  • java
 
阅读更多

发布消息:

public class EmitLog {

    private static final String EXCHANGE_NAME = "logs";

    public static void main(String[] argv)
                  throws java.io.IOException {

        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();

        channel.exchangeDeclare(EXCHANGE_NAME, "fanout");

        String message = getMessage(argv);

        channel.basicPublish(EXCHANGE_NAME, "", null, message.getBytes());
        System.out.println(" [x] Sent '" + message + "'");

        channel.close();
        connection.close();
    }
    //...
}

 

订阅消息:

public class ReceiveLogs {
  private static final String EXCHANGE_NAME = "logs";

  public static void main(String[] argv) throws Exception {
    ConnectionFactory factory = new ConnectionFactory();
    factory.setHost("localhost");
    Connection connection = factory.newConnection();
    Channel channel = connection.createChannel();

    channel.exchangeDeclare(EXCHANGE_NAME, "fanout");
    String queueName = channel.queueDeclare().getQueue();
    channel.queueBind(queueName, EXCHANGE_NAME, "");

    System.out.println(" [*] Waiting for messages. To exit press CTRL+C");

    Consumer consumer = new DefaultConsumer(channel) {
      @Override
      public void handleDelivery(String consumerTag, Envelope envelope,
                                 AMQP.BasicProperties properties, byte[] body) throws IOException {
        String message = new String(body, "UTF-8");
        System.out.println(" [x] Received '" + message + "'");
      }
    };
    channel.basicConsume(queueName, true, consumer);
  }
}

 订阅可以分为持久订阅和非持久订阅,对于持久订阅的消费者,在队列声明时,要声明为持久队列

channel.queueDeclare(queueName, true, false, false, null);

 持久订阅的队列在rabbitmq服务器重启的情况下,还可以继续持有该队列数据

非持久订阅队列在服务器重启的情况下,会失去所有未消费的队列数据

 

注意:由于是发布/订阅模式,所以在exchange绑定时是不需要指定routingKey

channel.queueBind(queueName, Constants.EXCHANGE_FANT, "");

 

分享到:
评论

相关推荐

    rabbitmq 发布/订阅 java 实现

    在Java开发中,RabbitMQ提供了一套完整的API,使得开发者能够轻松地实现发布/订阅模式。这种模式下,生产者发送消息到一个主题,而多个消费者可以订阅这个主题,接收并处理这些消息。 首先,要使用RabbitMQ,你需要...

    RabbitMQ:安装、配置与使用初探

    可以根据实际需求进一步探索 RabbitMQ 的高级功能,如发布/订阅模式、持久化消息等。更多关于配置的信息可以参考官方文档:[http://www.rabbitmq.com/configure.html#config-items]...

    rabbitMQ发布和订阅共7页.pdf.zip

    **RabbitMQ发布与订阅模式详解** RabbitMQ是一款开源的消息队列系统,基于AMQP(Advanced Message Queuing Protocol)协议实现,广泛应用于分布式系统中的异步任务处理、解耦和扩展性提升。在这个名为“rabbitMQ...

    RabbitMQ封装为c++版本,并且使用方式为发布订阅模式

    在这个项目中,我们关注的是RabbitMQ的C++客户端库的封装以及如何实现发布订阅模式。 首先,我们要了解RabbitMQ的基本概念。RabbitMQ是一个消息代理,它接收和转发消息,充当生产者和消费者之间的桥梁。生产者是...

    rabbitmq发布订阅

    【标题】:“rabbitmq发布订阅”是分布式消息传递中的一个重要概念,它允许生产者发送消息到RabbitMQ服务器,而多个消费者可以订阅这些消息并进行处理。RabbitMQ是一个开源的消息代理和队列服务器,使用AMQP...

    RabbitMQ 发布者订阅者

    本文将深入探讨基于RabbitMQ实现的发布者订阅者(Publisher-Subscriber)模型,以及如何通过它来优化系统架构。 发布者订阅者模型是消息队列中的一种通信模式,其中发布者发送消息到一个主题,而多个订阅者可以监听...

    C# .net 6 rabbitMq发布订阅类封装

    RabbitListener是mq消息的监听,BasicPublish丢消息的方法

    RabbitMQDemo_RabbitMQ发布与订阅Demo_rabbitmq_JSON_中间件_

    总结来说,"RabbitMQDemo_RabbitMQ发布与订阅Demo_rabbitmq_JSON_中间件_"是一个演示项目,其核心在于利用RabbitMQ作为中间件,通过发布者发送JSON格式的消息到队列,由订阅者从队列中接收并处理这些消息。...

    RabbitMQ-Server安装包

    它实现了AMQP(Advanced Message Queuing Protocol)协议,并提供了可靠的消息传输、灵活的消息路由、消息队列、发布/订阅等功能。 通过下载并安装rabbitmq-server-3.7.28,你可以部署并运行这个具体版本的RabbitMQ...

    C# RabbitMQ 主题订阅的源码

    主题订阅模式是RabbitMQ提供的一种发布/订阅模型,其中消息基于特定的路由键(topic)进行发送和接收。路由键类似于正则表达式,允许接收者根据需要过滤消息。 ### 4. 创建RabbitMQ连接 在C#中,我们首先需要创建一...

    RabbitMQ实战指南-rabbitmq-action.zip

    4. **事件驱动架构**: 通过发布/订阅模式,实现事件驱动的系统设计。 5. **流量控制**: 在高并发场景下,RabbitMQ能缓冲瞬时流量,避免后端服务过载。 通过学习RabbitMQ实战指南,你可以掌握如何在实际项目中运用...

    RabbitMQ-环境安装包

    2. **RabbitMQ Server**: RabbitMQ 本身是消息队列服务,允许应用程序通过发布和订阅模式进行异步通信,从而提高系统的可扩展性和灵活性。 **Erlang 安装步骤**: 1. **更新系统**: 在安装任何新软件之前,确保你的...

    WCF/RabbitMQ绑定/负载均衡

    这意味着WCF服务可以通过RabbitMQ发布消息,而WCF客户端可以订阅这些消息,从而实现服务之间的解耦和异步通信。 **负载均衡** 负载均衡是优化系统性能和容错能力的重要手段。在WCF中,可以通过配置多个服务实例并...

    kettle rabbitmq 插件开发

    描述没有提供具体细节,但我们可以假设内容可能涵盖如何结合 Kettle 和 RabbitMQ 实现数据流的发布和订阅。这通常涉及以下几个关键知识点: 1. **RabbitMQ 简介**:首先,我们需要了解 RabbitMQ 的基本概念,包括它...

    RabbitMQ linux 安装包和安装环境

    你可以开始创建队列、交换机和绑定,实现消息的发布和订阅。记住,RabbitMQ的强大之处在于其灵活性和丰富的插件系统,可以根据具体需求进行定制和扩展。通过持续学习和实践,你可以充分利用RabbitMQ来优化和提升你的...

    RabbitMQ技术帮助文档

    RabbitMQ 是一种基于 AMQP(高级消息队列协议)的消息中间件,它提供了一个健壮的消息传递系统,用于在分布式系统中处理消息的发布、订阅和路由。RabbitMQ 支持多种消息传递模式,并且可以与各种编程语言集成。 ###...

    RabbitMQ中文文档.pdf

    * 发布/订阅:RabbitMQ可以用来实现发布/订阅模式,用于实时推送消息。 * 远程过程调用:RabbitMQ可以用来实现远程过程调用,用于分布式系统的通信。 RabbitMQ的优点包括: * 高可靠性:RabbitMQ提供了多种机制来...

    RabbitMQClient_订阅测试.zip_rabbitmq

    在实际使用中,RabbitMQ的订阅模式是基于发布/订阅(Publish/Subscribe)模型,其中生产者发送消息到一个交换机,然后由交换机根据预定义的路由规则将消息分发到一个或多个队列。消费者订阅这些队列,当有新消息到达...

    rabbitmq 操作手册

    由于其高度可扩展性和可靠性,RabbitMQ被广泛应用于各种场景中,如异步处理、任务队列、发布订阅模型等。 #### 二、RabbitMQ安装技巧 1. **Erlang环境安装**: - RabbitMQ基于Erlang语言开发,因此首先需要安装...

Global site tag (gtag.js) - Google Analytics