1.Docker安装RabbitMQ
- 拉取镜像: docker pull rabbitmq:management ,management带有控制台
- 创建容器: docker run --name rabbitmq -d -p 15672:15672 -p 5672:5672 rabbitmq:management
- 访问控制台: http://ip:15672,用户名和密码默认为:guest
2.简单使用
Maven:
<!-- https://mvnrepository.com/artifact/com.rabbitmq/amqp-client -->
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.9.0</version>
</dependency>
生产者:
import com.rabbitmq.client.*;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
public class Main {
public static void main(String[] args) throws IOException, TimeoutException {
String QUEUE_NAME = "testQueue";
String EXCHANGE_NAME = "test-exchange";
String ROUTING_KEY = "TEST";
String MESSAGE = "123";
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("你的RabbitMQ主机地址");
factory.setPort(5672);
factory.setVirtualHost("/");//虚拟路径,默认存在 “/”
factory.setUsername("guest");
factory.setPassword("guest");
//获取连接
Connection connection = factory.newConnection();
//创建通道
final Channel channel = connection.createChannel();
//声明交换机
channel.exchangeDeclare(EXCHANGE_NAME, "direct", true);
//声明队列
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
//绑定队列
channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, ROUTING_KEY);
//发布
channel.basicPublish(EXCHANGE_NAME, ROUTING_KEY, null, MESSAGE.getBytes());
channel.close();
connection.close();
}
}
消费者:
import com.rabbitmq.client.*;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
public class Main {
public static void main(String[] args) throws IOException, TimeoutException {
String QUEUE_NAME = "testQueue";
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("你的RabbitMQ主机地址");
factory.setPort(5672);
factory.setVirtualHost("/");//虚拟路径,默认存在 “/”
factory.setUsername("guest");
factory.setPassword("guest");
//获取连接
Connection connection = factory.newConnection();
//创建通道
final Channel channel = connection.createChannel();
while (true) {
channel.basicConsume(QUEUE_NAME, false, "", new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
channel.basicAck(envelope.getDeliveryTag(), false);
System.out.println(envelope.getDeliveryTag());
System.out.println("消息内容:"+new String(body,"UTF-8"));
}
});
}
}
}