RabbitMQ 简单队列

2019-03-05 22:34|来源: 网路

生产者将消息发送到队列,消费者从队列中获取消息。


P:消息的生产者
C:消息的消费者
红色:队列
首先引用rabbitmq的客户端程序所依赖的jar包:
<dependency>
    <groupId>com.rabbitmq</groupId>
    <artifactId>amqp-client</artifactId>
    <version>3.6.2</version>
</dependency>


获取rabbitmq连接
public static Connection getConnection() throws Exception {
    //定义连接工厂
    ConnectionFactory factory = new ConnectionFactory();
    //设置服务地址
    factory.setHost("localhost");
    //端口
    factory.setPort(5672);
    //设置账号信息,用户名、密码、vhost
    factory.setVirtualHost("/testvhost");
    factory.setUsername("test");
    factory.setPassword("test");
    // 通过工程获取连接
    Connection connection = factory.newConnection();
    return connection;
}



生产者发送消息

private final static String QUEUE_NAME = "test_queue";
@Test
public void testSend() throws Exception {
    // 获取到连接以及mq通道
    Connection connection = ConnectionUtil.getConnection();
    // 从连接中创建通道
    Channel channel = connection.createChannel();
    // 声明(创建)队列
    channel.queueDeclare(QUEUE_NAME, false, false, false, null);
    // 消息内容
    String message = "Hello World!";
    channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
    System.out.println(" [x] Sent '" + message + "'");
    //关闭通道和连接
    channel.close();
    connection.close();
}


执行流程
1、获取一个mq连接
Connection connection = ConnectionUtil.getConnection();
2、根据连接创建通道
Channel channel = connection.createChannel();
3、声明(创建)队列
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
4、消息内容
channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
点击上面的队列名称,查询具体的队列中的信息


消费者从队列中获取消息

@Test
public void testRecv() throws Exception{
    // 获取到连接以及mq通道
    Connection connection = ConnectionUtil.getConnection();
    Channel channel = connection.createChannel();
    // 声明队列
    channel.queueDeclare(QUEUE_NAME, false, false, false, null);
    // 定义队列的消费者
    QueueingConsumer consumer = new QueueingConsumer(channel);
    // 监听队列
    channel.basicConsume(QUEUE_NAME, true, consumer);
    // 获取消息
    while (true) {
        QueueingConsumer.Delivery delivery = consumer.nextDelivery();
        String message = new String(delivery.getBody());
        System.out.println(" [x] Received '" + message + "'");
    }
}


书生整理于网络


相关问答

更多

netty和rabbitmq的区别

netty和rabbitmq层次的问题: 我知道netty是tcp通信框架,rabbitmq是基于tcp通信封装的一种消息队列。如果包含套节字的话他们之间的关系层次是 socket/nio ---> netty ---> rabbitmq 这种,不知道我理解的有没有错误。 netty和rabbitmq 替换关系: 在不考虑数据解析序列化的前提下,单对单的,不涉及延时:能用netty的地方是不是可以用rabbitmq?能用rabbitmq的地方是不是可以使用netty+protobuf替换。

Windows10安装RabbitMQ ,安装完成所有命令都报“系统找不到指定文件”

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

rabbitmq 消费者在javaweb中的使用

这个,监听都是这样,得循环等待,那用多线程吧,一个线程监听队列,并存储队列信息。另一个线程处理这个信息。

java如何获取rabbitmq队列中消息数量

下面是RabbitMQ的消息确认机制:“为了确保消息不会丢失,RabbitMQ支持消息确认机制。客户端在接受到消息并处理完后,可以发送一个ack消息给RabbitMQ,告诉它该消息可以安全的删除了。假如客户端在发送ack之前意外死掉了,那么RabbitMQ会将消息投递到下一个consumer客户端。如果有多个consumer客户端,RabbitMQ在投递消息时是轮询的。RabbitMQ如何判断客户端死掉了?唯一根据是客户端连接是否断开。这里没有超时机制,也就是说客户端可以处理一个消息很长时间,只要 ...

如何搭建rabbitmq服务器

1、安装 在Mac下安装RabbitMQ是非常简单的,一般默认RabbitMQ服务器依赖的Erlang已经安装,只需要用下面两个命令就可以完成RabbitMQ的安装(前提是homebrew已经被安装): ? brew update brew install rabbitmq 安装完成后需要将/usr/local/sbin添加到$PATH,可以将下面这两行加到~/.bash_profile或者~/.profile: # RabbitMQ Config export PATH=$PATH:/usr/l ...