安装步骤略过。

启动

启动很简单,找到安装后的 RabbitMQ 所在目录下的 sbin 目录,可以看到该目录下有6个以 rabbitmq 开头的可执行文件,直接执行 rabbitmq-server 即可,下面将 RabbitMQ 的安装位置以 . 代替,启动命令就是:

  1. ./sbin/rabbitmq-server

如果配置完环境变量,就可以省去路径

后台启动

  1. ./sbin/rabbitmq-server -detached

查询服务器状态:sbin 目录下有个特别重要的文件叫 rabbitmqctl ,它提供了 RabbitMQ 管理需要的几乎一站式解决方案,绝大部分的运维命令它都可以提供。
查询 RabbitMQ 服务器的状态信息可以用参数 status :

  1. ./sbin/rabbitmqctl status

关闭 RabbitMQ 节点

我们知道 RabbitMQ 是用 Erlang 语言写的,在Erlang 中有两个概念:节点和应用程序。节点就是 Erlang 虚拟机的每个实例,而多个 Erlang 应用程序可以运行在同一个节点之上。节点之间可以进行本地通信(不管他们是不是运行在同一台服务器之上)。比如一个运行在节点A上的应用程序可以调用节点B上应用程序的方法,就好像调用本地函数一样。如果应用程序由于某些原因奔溃,Erlang 节点会自动尝试重启应用程序。
如果要关闭整个 RabbitMQ 节点可以用参数 stop :
  1. ./sbin/rabbitmqctl stop

它会和本地节点通信并指示其干净的关闭,也可以指定关闭不同的节点,包括远程节点,只需要传入参数 -n :

  1. ./sbin/rabbitmqctl -n rabbit@server.example.com stop

-n node 默认 node 名称是 rabbit@server ,如果你的主机名是 server.example.com ,那么 node 名称就是 rabbit@server.example.com 。

关闭 RabbitMQ 应用程序

如果只想关闭应用程序,同时保持 Erlang 节点运行则可以用 stop_app:

  1. ./sbin/rabbitmqctl stop_app

启动 RabbitMQ 应用程序

  1. ./sbin/rabbitmqctl start_app

重置 RabbitMQ 节点

  1. ./sbin/rabbitmqctl reset

查看已声明的队列

  1. ./sbin/rabbitmqctl list_queues

查看交换器

  1. ./sbin/rabbitmqctl list_exchanges

查看绑定

  1. ./sbin/rabbitmqctl list_bindings

Java 客户端访问

RabbitMQ 支持多种语言访问,以 Java 为例看下一般使用 RabbitMQ 的步骤。

  1. maven工程的pom文件中添加依赖
  1. <dependency>
  2. <groupId>com.rabbitmq</groupId>
  3. <artifactId>amqp-client</artifactId>
  4. <version>4.1.0</version>
  5. </dependency>
  1. 消息生产者
  1. import com.rabbitmq.client.Channel;
  2. import com.rabbitmq.client.Connection;
  3. import com.rabbitmq.client.ConnectionFactory;
  4. import java.io.IOException;
  5. import java.util.concurrent.TimeoutException;
  6. public class Producer {
  7.  
  8. public static void main(String[] args) throws IOException, TimeoutException {
  9. //创建连接工厂
  10. ConnectionFactory factory = new ConnectionFactory();
  11. factory.setUsername("guest");
  12. factory.setPassword("guest");
  13. //设置 RabbitMQ 地址
  14. factory.setHost("localhost");
  15. //建立到代理服务器到连接
  16. Connection conn = factory.newConnection();
  17. //获得信道
  18. Channel channel = conn.createChannel();
  19. //声明交换器
  20. String exchangeName = "hello-exchange";
  21. channel.exchangeDeclare(exchangeName, "direct", true);
  22.  
  23. String routingKey = "hola";
  24. //发布消息
  25. byte[] messageBodyBytes = "quit".getBytes();
  26. channel.basicPublish(exchangeName, routingKey, null, messageBodyBytes);
  27.  
  28. channel.close();
  29. conn.close();
  30. }
  31. }
  1. 消息消费者
  1. import com.rabbitmq.client.*;
  2. import java.io.IOException;
  3. import java.util.concurrent.TimeoutException;
  4. public class Consumer {
  5.  
  6. public static void main(String[] args) throws IOException, TimeoutException {
  7. ConnectionFactory factory = new ConnectionFactory();
  8. factory.setUsername("guest");
  9. factory.setPassword("guest");
  10. factory.setHost("localhost");
  11. //建立到代理服务器到连接
  12. Connection conn = factory.newConnection();
  13. //获得信道
  14. final Channel channel = conn.createChannel();
  15. //声明交换器
  16. String exchangeName = "hello-exchange";
  17. channel.exchangeDeclare(exchangeName, "direct", true);
  18. //声明队列
  19. String queueName = channel.queueDeclare().getQueue();
  20. String routingKey = "hola";
  21. //绑定队列,通过键 hola 将队列和交换器绑定起来
  22. channel.queueBind(queueName, exchangeName, routingKey);
  23.  
  24. while(true) {
  25. //消费消息
  26. boolean autoAck = false;
  27. String consumerTag = "";
  28. channel.basicConsume(queueName, autoAck, consumerTag, new DefaultConsumer(channel) {
  29. @Override
  30. public void handleDelivery(String consumerTag,
  31. Envelope envelope,
  32. AMQP.BasicProperties properties,
  33. byte[] body) throws IOException {
  34. String routingKey = envelope.getRoutingKey();
  35. String contentType = properties.getContentType();
  36. System.out.println("消费的路由键:" + routingKey);
  37. System.out.println("消费的内容类型:" + contentType);
  38. long deliveryTag = envelope.getDeliveryTag();
  39. //确认消息
  40. channel.basicAck(deliveryTag, false);
  41. System.out.println("消费的消息体内容:");
  42. String bodyStr = new String(body, "UTF-8");
  43. System.out.println(bodyStr);
  44.  
  45. }
  46. });
  47. }
  48. }
  49. }
    1. 运行 Consumer
      先运行 Consumer ,这样当生产者发送消息的时候能在消费者后端看到消息记录。
    2. 运行 Producer
      接着运行 Producer ,发布一条消息,在 Consumer 的控制台能看到接收的消息:

RabbitMQ 使用的更多相关文章

  1. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

  2. RabbitMq应用二

    在应用一中,基本的消息队列使用已经完成了,在实际项目中,一定会出现各种各样的需求和问题,rabbitmq内置的很多强大机制和功能会帮助我们解决很多的问题,下面就一个一个的一起学习一下. 消息响应机制 ...

  3. 如何优雅的使用RabbitMQ

    RabbitMQ无疑是目前最流行的消息队列之一,对各种语言环境的支持也很丰富,作为一个.NET developer有必要学习和了解这一工具.消息队列的使用场景大概有3种: 1.系统集成,分布式系统的设 ...

  4. RabbitMq应用一的补充(RabbitMQ的应用场景)

    直接进入正题. 一.异步处理 场景:发送手机验证码,邮件 传统古老处理方式如下图 这个流程,全部在主线程完成,注册->入库->发送邮件->发送短信,由于都在主线程,所以要等待每一步完 ...

  5. RabbitMq应用一

    RabbitMq应用一 RabbitMQ的具体概念,百度百科一下,我这里说一下我的理解,如果有少或者不对的地方,欢迎纠正和补充. 一个项目架构,小的时候,一般都是传统的单一网站系统,或者项目,三层架构 ...

  6. 缓存、队列(Memcached、redis、RabbitMQ)

    本章内容: Memcached 简介.安装.使用 Python 操作 Memcached 天生支持集群 redis 简介.安装.使用.实例 Python 操作 Redis String.Hash.Li ...

  7. 消息队列性能对比——ActiveMQ、RabbitMQ与ZeroMQ(译文)

    Dissecting Message Queues 概述: 我花了一些时间解剖各种库执行分布式消息.在这个分析中,我看了几个不同的方面,包括API特性,易于部署和维护,以及性能质量..消息队列已经被分 ...

  8. windows下 安装 rabbitMQ 及操作常用命令

    rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统.它遵循Mozilla Public License开源协议,采用 Erlang 实现的工业级的消息队列(MQ)服务器,Rab ...

  9. RabbitMQ + PHP (三)案例演示

    今天用一个简单的案例来实现 RabbitMQ + PHP 这个消息队列的运行机制. 主要分为两个部分: 第一:发送者(publisher) 第二:消费者(consumer) (一)生产者 (创建一个r ...

  10. RabbitMQ + PHP (二)AMQP拓展安装

    上篇说到了 RabbitMQ 的安装. 这次要在讲案例之前,需要安装PHP的AMQP扩展.不然可能会报以下两个错误. 1.Fatal error: Class 'AMQPConnection' not ...

随机推荐

  1. 刷题总结——二叉苹果树(ssoj树形dp+记忆化搜索)

    题目: 题目背景 URAL:http://acm.timus.ru/problem.aspx?space=1&num=1018 题目描述 有一棵苹果树,如果树枝有分叉,一定是分 2 叉(就是说 ...

  2. P3694 邦邦的大合唱站队 (状压DP)

    题目背景 BanG Dream!里的所有偶像乐队要一起大合唱,不过在排队上出了一些问题. 题目描述 N个偶像排成一列,他们来自M个不同的乐队.每个团队至少有一个偶像. 现在要求重新安排队列,使来自同一 ...

  3. Codevs 2956 排队问题

    2956 排队问题 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题目描述 Description 有N个学生去食堂,可教官规定:必须2人或3人组成一组,求有多少种不 ...

  4. 533. Lonely Pixel II

    Given a picture consisting of black and white pixels, and a positive integer N, find the number of b ...

  5. T3137 栈练习1 codevs

    codevs.cn/problem/3137 题目描述 Description 给定一个栈(初始为空,元素类型为整数,且小于等于100),只有两个操作:入栈和出栈.先给出这些操作,请输出最终栈的栈顶元 ...

  6. Java中Arrays类与Math类

    Arrays(数组工具类) Java中已经封装好的类,提供大量静态方法供用户对数组的使用. 导包:import java.util.Arrays 1.Arrays.toString(数组) //返回值 ...

  7. Vim出现:_arguments:450: _vim_files: function definition file not found的问题解决

    安装了zsh之后使用vim出现如下错误: arguments:450: _vim_files: function definition file not found _arguments:450: _ ...

  8. jquery提示消息,简单通用

    jquery提示消息.简单通用 function showTips(txt,time,status) { var htmlCon = ''; if(txt != ''){ if(status != 0 ...

  9. C标准提前定义宏,调试时加打印非常实用

    #include<stdio.h> int main(int argc, char *argv[]) { printf("File:[%s]\r\n", __FILE_ ...

  10. c++引用和const 用法 数组 指针

    非const引用,只能用object为其赋值: <c++primer>P52 而const引用则可以用临时变量为其赋值: 如: const int &r = 32://可以 int ...