博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RabbitMQ 使用
阅读量:2386 次
发布时间:2019-05-10

本文共 4448 字,大约阅读时间需要 14 分钟。

安装步骤略过。

启动

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

./sbin/rabbitmq-server

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

后台启动

./sbin/rabbitmq-server -detached

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

查询 RabbitMQ 服务器的状态信息可以用参数 status :

./sbin/rabbitmqctl status

关闭 RabbitMQ 节点

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

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

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

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

关闭 RabbitMQ 应用程序

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

./sbin/rabbitmqctl stop_app

启动 RabbitMQ 应用程序

./sbin/rabbitmqctl start_app

重置 RabbitMQ 节点

./sbin/rabbitmqctl reset

查看已声明的队列

./sbin/rabbitmqctl list_queues

查看交换器

./sbin/rabbitmqctl list_exchanges

查看绑定

./sbin/rabbitmqctl list_bindings

Java 客户端访问

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

  1. maven工程的pom文件中添加依赖
com.rabbitmq
amqp-client
4.1.0
  1. 消息生产者
import com.rabbitmq.client.Channel;import com.rabbitmq.client.Connection;import com.rabbitmq.client.ConnectionFactory;import java.io.IOException;import java.util.concurrent.TimeoutException;public class Producer {    public static void main(String[] args) throws IOException, TimeoutException {        //创建连接工厂        ConnectionFactory factory = new ConnectionFactory();        factory.setUsername("guest");        factory.setPassword("guest");        //设置 RabbitMQ 地址        factory.setHost("localhost");        //建立到代理服务器到连接        Connection conn = factory.newConnection();        //获得信道        Channel channel = conn.createChannel();        //声明交换器        String exchangeName = "hello-exchange";        channel.exchangeDeclare(exchangeName, "direct", true);        String routingKey = "hola";        //发布消息        byte[] messageBodyBytes = "quit".getBytes();        channel.basicPublish(exchangeName, routingKey, null, messageBodyBytes);        channel.close();        conn.close();    }}
  1. 消息消费者
import com.rabbitmq.client.*;import java.io.IOException;import java.util.concurrent.TimeoutException;public class Consumer {    public static void main(String[] args) throws IOException, TimeoutException {        ConnectionFactory factory = new ConnectionFactory();        factory.setUsername("guest");        factory.setPassword("guest");        factory.setHost("localhost");        //建立到代理服务器到连接        Connection conn = factory.newConnection();        //获得信道        final Channel channel = conn.createChannel();        //声明交换器        String exchangeName = "hello-exchange";        channel.exchangeDeclare(exchangeName, "direct", true);        //声明队列        String queueName = channel.queueDeclare().getQueue();        String routingKey = "hola";        //绑定队列,通过键 hola 将队列和交换器绑定起来        channel.queueBind(queueName, exchangeName, routingKey);        while(true) {            //消费消息            boolean autoAck = false;            String consumerTag = "";            channel.basicConsume(queueName, autoAck, consumerTag, 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.getContentType();                    System.out.println("消费的路由键:" + routingKey);                    System.out.println("消费的内容类型:" + contentType);                    long deliveryTag = envelope.getDeliveryTag();                    //确认消息                    channel.basicAck(deliveryTag, false);                    System.out.println("消费的消息体内容:");                    String bodyStr = new String(body, "UTF-8");                    System.out.println(bodyStr);                }            });        }    }}
    1. 运行 Consumer
      先运行 Consumer ,这样当生产者发送消息的时候能在消费者后端看到消息记录。
    2. 运行 Producer

      接着运行 Producer ,发布一条消息,在 Consumer 的控制台能看到接收的消息:

 

posted @
2018-12-25 15:40 阅读(
...) 评论(
...)

转载地址:http://yzjab.baihongyu.com/

你可能感兴趣的文章
Eclipse带命令行参数调试
查看>>
php smtp发送邮件
查看>>
yii框架的404、500等异常处理
查看>>
yii框架在layout模式下,模版和layout文件的渲染顺序
查看>>
php5对象复制、clone、浅复制与深复制
查看>>
php设计模式
查看>>
git与github在ubuntu下的使用
查看>>
css pie.htc使用总结
查看>>
python包含中文字符串长度
查看>>
sysbench 0.5 性能测试工具使用手册
查看>>
通过telnet连接查看memcache服务器
查看>>
django不用在数据库中创建新的user表而使用它的后台管理功能
查看>>
php array_unshift()修改数组key
查看>>
mysql性能优化-查询(Query)优化-2
查看>>
MySQL分区表的使用
查看>>
MongoDB 地理位置索引的实现原理
查看>>
MongoDB与MySQL的插入、查询性能测试
查看>>
深入理解OAuth2.0协议
查看>>
https原理:证书传递、验证和数据加密、解密过程解析
查看>>
MySQL在大型网站的应用架构演变
查看>>