`

rabbitmq应用总结

 
阅读更多
http://melin.iteye.com/blog/691265
推荐http://hi.baidu.com/vegeta_ma/item/9929cbe23b20f0246cabb807

1,Connection
连接,与rabbitmq server建立的一个连接,由ConnectionFactory创建,虽然创建时指定了多个server address,但每个connection只与一个物理的server进行连接,此连接是基于Socket进行连接的,这个可以相似的理解为像一个DB Connection。
ConnectionParametersparams = new ConnectionParameters();
params.setUsername(userName);
params.setPassword(password);
params.setVirtualHost(virtualHost);
params.setRequestedHeartbeat(0);
ConnectionFactoryfactory = new ConnectionFactory(params);
Connection conn = factory.newConnection(hostName,
AMQP.PROTOCOL.PORT);
2,Channel
建立在connection基础上的一个通道,相对于connection来说,它是轻量级的。可以这样理解,它就像是hibernate里面的session一样,相对于DB Connection来说,session就是一个轻量级的东西。
Channel channel =conn.createChannel();
注:尽量避免在多线程中使用一个channel,Channeljavadoc有如下说明:
While aChannel can be used by multiple threads, it's important to ensure
that onlyone thread executes a command at once. Concurrent execution of
commandswill likely cause an UnexpectedFrameError to be thrown.
另官方Java Client API Guide里面也同样提到
     Channel thread-safety
In general, Channel instances should not be used by more than one thread simultaneously: applicationcode should maintain a clear notion of thread ownership for Channel instances.If more than one thread needs to access a particular Channel instance, the application should enforcemutual exclusion itself, for example by synchronising on the Channel.
Symptoms of incorrect serialisation of Channel operations include, but are not limited to,de>IllegalStateExceptionde>s with the message "cannot execute more than one synchronous AMQP command at a time", and de>UnexpectedFrameErrorde>s.

3,Exchange,Queue,RoutingKey
Direct Exchange – 处理路由键。需要将一个队列绑定到交换机上,要求该消息与一个特定的路由键完全匹配。这是一个完整的匹配。如果一个队列绑定到该交换机上要求路由键 “dog”,则只有被标记为“dog”的消息才被转发,不会转发dog.puppy,也不会转发dog.guard,只会转发dog。
Channel channel = connection.createChannel();
channel.exchangeDeclare("exchangeName", "direct"); //direct fanout topic
channel.queueDeclare("queueName");
//channel.queueDeclare(queueName, true, false, false, null);
channel.queueBind("queueName", "exchangeName", "routingKey");

byte[] messageBodyBytes = "hello world".getBytes();
//需要绑定路由键
channel.basicPublish("exchangeName", "routingKey", MessageProperties.PERSISTENT_TEXT_PLAIN, messageBodyBytes);



Fanout Exchange – 不处理路由键。你只需要简单的将队列绑定到交换机上。一个发送到交换机的消息都会被转发到与该交换机绑定的所有队列上。很像子网广播,每台子网内的主机都获得了一份复制的消息。Fanout交换机转发消息是最快的。

Channel channel = connection.createChannel();
channel.exchangeDeclare("exchangeName", "fanout"); //direct fanout topic
channel.queueDeclare("queueName");
//channel.queueDeclare(queueName, true, false, false, null);
channel.queueBind("queueName", "exchangeName", "routingKey");

channel.queueDeclare("queueName1");
channel.queueBind("queueName1", "exchangeName", "routingKey1");

byte[] messageBodyBytes = "hello world".getBytes();
//路由键需要设置为空
channel.basicPublish("exchangeName", "", MessageProperties.PERSISTENT_TEXT_PLAIN, messageBodyBytes);



Topic Exchange – 将路由键和某模式进行匹配。此时队列需要绑定要一个模式上。符号“#”匹配一个或多个词,符号“*”匹配不多不少一个词。因此“audit.#”能够匹配到“audit.irs.corporate”,但是“audit.*” 只会匹配到“audit.irs”。我在RedHat的朋友做了一张不错的图,来表明topic交换机是如何工作的:

Channel channel = connection.createChannel();
channel.exchangeDeclare("exchangeName", "topic"); //direct fanout topic
channel.queueDeclare("queueName");
//channel.queueDeclare(queueName, true, false, false, null);
channel.queueBind("queueName", "exchangeName", "routingKey.*");

byte[] messageBodyBytes = "hello world".getBytes();
channel.basicPublish("exchangeName", "routingKey.one", MessageProperties.PERSISTENT_TEXT_PLAIN, messageBodyBytes);
分享到:
评论

相关推荐

    RabbitMQ使用总结

    ### RabbitMQ 使用总结 #### 一、安装与配置 **1. 安装顺序** - **ERLANG安装**: 首先确保安装了Erlang环境。安装时注意选择带有`windowdll`选项的版本,这有助于后续RabbitMQ的稳定运行。 - **RabbitMQ安装**: ...

    RabbitMQ和Erlang开发应用

    **RabbitMQ与Erlang开发应用** 在IT行业中,消息队列系统是分布式系统间进行异步通信的重要工具,而RabbitMQ作为一款广泛使用的开源消息代理,扮演着核心角色。RabbitMQ允许应用程序之间通过发布/订阅、路由、队列...

    RabbitMQ与SpringMVC集成

    总结来说,RabbitMQ与SpringMVC的集成可以极大地增强Web应用的异步处理能力,提高系统的可扩展性。在实际应用中,需要正确安装和配置Erlang及RabbitMQ,然后利用Spring的AMQP支持将消息队列功能融入到Web应用中,...

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

    **正文** ...总结,`rabbitmq-c-master`的编译过程主要涉及CMake的使用,以及对RabbitMQ和AMQP协议的理解。通过这个过程,开发者可以将RabbitMQ的功能集成到C语言的应用中,实现可靠的消息传递和异步处理。

    RabbitMQ学习总结

    简单队列模式是RabbitMQ的基础应用场景。以下是一个简单的生产者代码示例: ```java package com.demo.rabbitmq.producer; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import ...

    RabbitMQ Java测试客户端

    总结一下,这个“RabbitMQ Java测试客户端”项目是一个实践示例,展示了如何在Java应用程序中使用RabbitMQ进行消息传递。它涵盖了连接管理、消息发送与接收的基本流程,对于学习和理解RabbitMQ在Java环境下的应用...

    Rabbitmq 默认配置文件模板

    总结来说,`rabbitmq.config`和`advanced.config`是RabbitMQ服务器的核心配置文件,它们定义了RabbitMQ的行为和性能特性。理解并正确配置这些文件对于优化RabbitMQ的性能和稳定性至关重要,特别是在分布式环境中。...

    rabbitMQ实战java版-rabbitMQ-demo.zip

    总结,RabbitMQ作为消息中间件,为Java开发者提供了强大的工具,帮助构建高可用、可扩展的系统。"rabbitMQ-demo.zip"中的"rabbitMQ-demo-main"项目是学习和实践RabbitMQ的宝贵资源,通过它,我们可以更深入地理解...

    rabbitMQ安装包.zip

    总结来说,RabbitMQ是一个强大的消息中间件,它的安装通常涉及下载安装包、解压、安装和启动服务。了解RabbitMQ的基本概念和使用方式对于构建高效、可靠的分布式系统至关重要。通过熟练掌握RabbitMQ,开发者可以构建...

    android上RabbitMQ发送简单例子

    总结来说,使用RabbitMQ在Android上进行网络发送涉及服务器安装、客户端集成、消息队列的声明和使用,以及AMQP协议的交互。对于初学者来说,理解这些基本概念和操作是至关重要的,可以帮助构建可靠和可扩展的跨平台...

    C#的Demo项目:RabbitMQ封装和使用

    总结起来,这个C# Demo项目旨在教会我们如何在.NET环境中使用RabbitMQ进行消息传递,通过封装RabbitMQ.Client库,我们可以更高效地利用交换机功能,实现不同场景下的消息路由。通过学习这个项目,开发者能够更好地...

    RabbitMQ简单总结

    RabbitMQ是一个开源的消息代理和队列服务器,它基于AMQP(Advanced Message Queuing Protocol)协议,被广泛应用于分布式系统中,用于处理异步任务和实现解耦。RabbitMQ由Erlang编程语言开发,具有高可用性、可扩展...

    RabbitMQDemo.rar

    **C#中的RabbitMQ应用** 在C#中使用RabbitMQ,首先需要安装`RabbitMQ.Client`或`Wenli.Data.RabbitMQ`库。以下是一些基本操作示例: 1. **创建连接和通道** 创建一个到RabbitMQ服务器的连接,并打开一个信道,这...

    linux中rabbitmq安装包

    总结来说,Linux上的RabbitMQ安装需要先安装Erlang环境,然后安装RabbitMQ服务器,并进行必要的配置和安全管理。RabbitMQ作为一个强大的消息中间件,能够有效地帮助你在分布式系统中实现异步处理和解耦。在实际应用...

    RabbitMQ相关问题总结.docx

    RabbitMQ 可以应用于服务间异步通信、顺序消费、定时任务、请求削峰等场景。 三、如何确保消息正确地发送至 RabbitMQ? 为了确保消息正确地发送至 RabbitMQ,可以使用发送方确认模式将信道设置成 confirm 模式。当...

    RabbitMQ技术总结

    ### RabbitMQ技术总结 #### 一、基础知识与概念 ##### 1.1 消息、消息协议、消息队列 **消息**:消息是信息的载体,在计算机系统中,消息通常指的是由数据组成的单位,这些数据可以是文本、图像、声音或其他任何...

    rabbitmq-3.7.5.jar

    总结来说,RabbitMQ是一个强大的消息中间件,能够有效地处理和传递消息,提供可靠的异步通信机制。对于开发者而言,使用RabbitMQ可以构建松散耦合、可扩展的系统,并通过“rabbitmq-3.7.5.exe”这样的安装程序轻松地...

    rabbitmq-c-master.zip

    总结,rabbitmq-c是RabbitMQ生态系统的重要组成部分,为C/C++开发者提供了与RabbitMQ服务器交互的便捷途径。通过理解其安装、使用和高级特性,我们可以更好地利用这个强大的工具,构建高效、稳定的消息传递系统。

    docker安装rabbitmq并整合springboot

    RabbitMQ 是一个基于 AMQP 协议的消息队列系统,广泛应用于企业级应用程序中。通过 Docker 安装 RabbitMQ,可以实现轻松快速的部署和管理。本文将指导您如何使用 Docker 安装 RabbitMQ,并整合 Spring Boot 实现消息...

    RabbitMQ 安装包和开启MQTT功能

    RabbitMQ 是一个开源的消息队列系统,它基于 Advanced Message Queuing Protocol (AMQP) 协议实现,广泛应用于分布式系统中的消息传递。RabbitMQ 的安装过程包括了下载、安装以及配置等步骤,而开启 MQTT 功能则可以...

Global site tag (gtag.js) - Google Analytics