1.防火墙开放rabbitmq client端通信口 :5672
2.新建一个普通用户,rabbitmqctl add_user jeff 123456
3.赋予用户权限:rabbitmqctl set_permissions -p "/" jeff ".*" ".*" ".*"
4.生产者代码
package com.jeff;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import java.util.concurrent.TimeoutException;
public class Producer {
//队列名称
private final static String QUEUE_NAME = "q_name";
public static void main(String[] argv) throws java.io.IOException, TimeoutException {
ConnectionFactory factory = new ConnectionFactory();
//rabbitmq服务器地址
factory.setHost("77.99.192.143");
factory.setUsername("jeff");
factory.setPassword("123456");
//创建连接
Connection connection = factory.newConnection();
//创建频道
Channel channel = connection.createChannel();
//声明一个队列,(参数名称,是否持久化,是否独占队列,当消费者连接断开是否自动删除队列,其他参数)
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
//发送的消息
String message = "Hi rabbitmq!";
//向队列中发送消息,(交换机名称,队列映射的路由名,消息其他属性,消息内容)
channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
System.out.println("Send succeed!");
//关闭频道和连接
channel.close();
connection.close();
}
}
5.消费者代码
package com.jeff;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.QueueingConsumer;
import java.util.concurrent.TimeoutException;
public class Consumer {
//队列名称
private final static String QUEUE_NAME = "q_name";
public static void main(String[] argv) throws java.io.IOException,
java.lang.InterruptedException, TimeoutException {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("77.99.192.143");
factory.setUsername("jeff");
factory.setPassword("123456");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
//声明队列
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
System.out.println("Waiting message!");
//创建队列消费者
QueueingConsumer consumer = new QueueingConsumer(channel);
//指定消费队列
channel.basicConsume(QUEUE_NAME, true, consumer);
while (true) {
//nextDelivery是一个阻塞方法(内部实现其实是阻塞队列的take方法)
QueueingConsumer.Delivery delivery = consumer.nextDelivery();
String message = new String(delivery.getBody());
System.out.println(message);
}
}
}
6.demo代码
https://gitee.com/jefffeng/rabbitmqdemo