`

RabbitMQ基础知识

 
阅读更多

Routing key由生产者指定。Binding key由消费者指定。二者联合决定一条消息的来去。

连接
ConnectionFactory factory = new ConnectionFactory();
factory.setHost(hostName);
Connection conn = factory.newConnection();
Channel channel = conn.createChannel();


  • 以上是得到一个rabbitmq连接最最基础的代码,当然了,还可以设置一些诸如用户名密码的事情。
  • 最后这个channel就可以用来收和发消息了。


消息者线程池
ExecutorService es = Executors.newFixedThreadPool(20);
Connection conn = factory.newConnection(es);

  • 消费者时使用,上述自动开了一20个线程的池来搞


地址数组
Address[] addrArr = new Address[]{ new Address(hostname1, portnumber1)
                                 , new Address(hostname2, portnumber2)};
Connection conn = factory.newConnection(addrArr);

  • 上述代码如果连hostname1失败了就去hostname2
  • factory.newConnection()会触发这个检测


声明exchange与queue
channel.exchangeDeclare(exchangeName, "direct", true);
String queueName = channel.queueDeclare().getQueue();
channel.queueBind(queueName, exchangeName, routingKey);


  • channel.exchangeDeclare 参数有 交换机名字 类型 是否持久化 不使用时是否自动删除 是否是内部的(不能被客户端使用) 其他参数
  • channel.queueDeclare 参数有 queue名字 是否持久化 独占的queue(仅供此连接) 不使用时是否自动删除 其他参数
  • channel.queueBind 参数有 queue名字 交换机名字 此次绑定使用的路由关键字 其他参数


发出消息
byte[] messageBodyBytes = "Hello, world!".getBytes();
channel.basicPublish(exchangeName, routingKey, null, messageBodyBytes);

  • channel.basicPublish 参数有 要发出的交换机名字 路由关键字 是否强制(设置为true时,找不到收的人时可以通过returnListener返回) 是否立即(其实rabbitmq不支持) 其他属性 消息主体


线程安全
  • Channel是线程好全的,但是最好是每个线程里用自己的Channel,因为在单个Channel里排队是有可能慢一些的


最简单的办法消费消息
boolean autoAck = false;
channel.basicConsume(queueName, autoAck, "myConsumerTag",
     new DefaultConsumer(channel) {
         @Override
         public void handleDelivery(String consumerTag,
                                    Envelope envelope,
                                    AMQP.BasicProperties properties,
                                    byte[] body)
             throws IOException
         {
             String routingKey = envelope.getRoutingKey();
             String contentType = properties.contentType;
             long deliveryTag = envelope.getDeliveryTag();
             // (process the message components here ...)
             channel.basicAck(deliveryTag, false);
         }
     });


  • 一个Channel一个Consumer
  • channel.basicAck 回发ACK 参数 tag 是否多个


零碎
  • channel.basicQos 指定服务质量设置 参数 最大的投送字节数 最大的投送消息数量 设置是否要应用到整个channel(而不是一个消费者)
  • factory.setAutomaticRecoveryEnabled(true) 网络有问题时,好后可自动恢复设置
  • cf.setRequestedHeartbeat(5) 设置心跳时间
  • exchange type可用的值:direct topic headers fanout
  • exchange的类型有一个default,basicPublish没有指定时使用,而且,如果routingKey在指定绑定的时候,会去到绑定的exchange
  • channel.queueDeclare().getQueue() 得到的是一个随机queue,断开连接后即删除
  • 当exchange为direct的时候routingKey与bindingKey必须完全一致才能消费消息


转自:http://www.cnblogs.com/dwlsxj/p/RabbitMQ.html

http://itindex.net/detail/50865-rabbitmq-java-client
分享到:
评论

相关推荐

    RabbitMq 基础知识.docx

    以下是对RabbitMQ基础知识的详细解释: 1. **消息持久化** - 消息持久化是确保即使RabbitMQ服务重启,消息也不会丢失的关键特性。这包括交换机(exchange)、队列(queue)和消息(message)的持久化。 - 在声明交换机...

    rabbitmq基础知识说明

    Broker:简单来说就是消息队列服务器实体。 Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。 Queue:消息队列载体,每个消息都会被投入到一个或多个队列。 Binding:绑定,它的作用就是把exchange和...

    RabbitMQ in Action高清版

    #### 二、RabbitMQ基础知识 **1. 消息队列概念** - **定义**:消息队列是一种用于应用程序间异步通信的数据结构,它允许发送方将消息发送到队列中,而接收方可以从队列中取出消息进行处理。 - **作用**:提高系统...

    rabbitmq基础+springboot集成rabbitmq

    **RabbitMQ基础** RabbitMQ是一个开源的消息代理和队列服务器,用于在分布式系统中进行消息传递。它是基于AMQP(Advanced Message Queuing Protocol)协议实现的,提供了高可用性、可扩展性和稳定性。RabbitMQ的...

    rabbitmq-server-windows-3.9.1.zip

    一、RabbitMQ基础知识 1. **消息队列**:RabbitMQ的核心是消息队列,它作为中间件存储和转发消息,确保生产者和消费者之间解耦。生产者发送消息到队列,而消费者从队列中接收消息,两者并不直接交互。 2. **节点与...

    rabbitmq视频

    ### RabbitMQ基础知识与核心概念 RabbitMQ是一种开源的消息代理软件,它支持多种消息协议,如AMQP(Advanced Message Queuing Protocol)。RabbitMQ能够帮助应用程序实现消息队列功能,从而使得消息能够在生产者...

    Rabbitmq笔记+入门教程+示例

    ### RabbitMQ基础知识与应用 #### 一、RabbitMQ简介 RabbitMQ 是一款开源的消息代理软件,也是 AMQP(Advanced Message Queuing Protocol)标准的一个实现。它支持多种消息传递模式,包括点对点(Direct)、发布/...

    轻松搞定RabbitMQ-012612501

    【RabbitMQ基础知识】 RabbitMQ是一个开源的消息代理和队列服务器,它基于高级消息队列协议(AMQP)标准,被广泛应用于分布式系统中,用于处理异步任务和组件间的解耦。它使用Erlang语言开发,支持多种编程语言的...

    springboot整合stream使用rabbitmq作为消息中间件

    2. **RabbitMQ基础知识**: - **Exchange**: 交换机是RabbitMQ中的一个核心概念,它根据路由键和绑定规则将消息分发到对应的队列。 - **Queue**: 队列是存储消息的地方,每个消息至少被一个队列接收,可以有多个...

    rabbitmq_server-3.0.4.tar.gz

    1. **RabbitMQ基础知识**: - **消息中间件**:RabbitMQ作为消息中间件,负责接收、存储和转发消息,使应用程序之间可以解耦通信。 - **AMQP协议**:它是跨平台的开放式标准,定义了消息的格式和交互方式,保证了...

    RabbitMQ实战 高效部署分布式消息队列

    #### 二、RabbitMQ基础知识 1. **概念理解** - **消息队列**:一种存储并转发消息的应用程序,用于实现生产者与消费者之间的解耦。 - **RabbitMQ**:基于AMQP 0-9-1协议的消息中间件,支持多种消息协议与插件,...

    rabbitmq-tutorial.zip

    **RabbitMQ基础知识:** RabbitMQ是基于AMQP(Advanced Message Queuing Protocol)协议的,它允许应用程序之间进行异步通信,从而提高系统的可扩展性和可靠性。消息队列的原理是生产者(Producer)发送消息到队列,...

    动力RabbitMQ实战视频教程-视频课程资源网盘链接提取码下载 .txt

    #### 一、RabbitMQ基础知识 1. **消息队列的概念**: - 消息队列是一种应用程序间通信的模式,它通过在发送者和接收者之间传递消息来实现解耦。 - RabbitMQ是一种开源的消息代理软件,支持多种消息队列协议,如...

    RabbitMQ-黑马

    #### 四、RabbitMQ基础知识 1. **简介**:RabbitMQ是一款开源的消息代理软件,支持多种消息传递协议。 2. **特点**: - **可靠性**:支持消息确认机制,确保消息不丢失。 - **灵活性**:提供多种交换机类型(如...

    RabbitMQ相关知识以及面试题

    RabbitMQ 相关知识点总结 RabbitMQ 是一种消息中间件,全称为 Message Queue,用于实现上下游传递消息,提供了消息队列、消息路由、消息消费等功能。下面是 RabbitMQ 相关知识点总结: 基础理论 * Broker:消息...

    RabbitMQ基础教程

    ### RabbitMQ基础教程知识点详解 #### 一、RabbitMQ简介 RabbitMQ是一种开源的消息代理和队列服务器,基于AMQP(Advanced Message Queuing Protocol)标准开发,它提供了多种编程语言的API接口,能够方便地与其他...

    rabbitmq-c-master.rar_RabbitMQ c lib_cmake编译_rabbitmq_rabbitmq-c

    在使用`rabbitmq-c`时,开发者需要理解AMQP协议的基础知识,包括交换机、队列、绑定和消息路由策略。同时,熟悉C编程和错误处理技巧也是必要的,因为`rabbitmq-c`的API是C语言风格的,需要手动管理内存和错误检查。 ...

    rabbitmq 3.10.2 window安装包

    RabbitMQ是一个开源的消息代理和队列服务器,广泛用于分布式系统中的消息传递。它基于AMQP(Advanced Message Queuing Protocol)标准,允许应用...了解这些知识点对于在Windows环境中部署和管理RabbitMQ服务至关重要。

    RabbitMQ实战指南-rabbitmq-action.zip

    **一、RabbitMQ基础** 1. **消息中间件**: 消息中间件是分布式系统中的重要组成部分,它允许不同组件之间通过异步通信进行解耦。RabbitMQ作为这样的中间件,负责接收、存储和转发消息。 2. **AMQP协议**: AMQP是一...

Global site tag (gtag.js) - Google Analytics