1.概念
vitural-host
connection channel
exchange
queue
routing key
bind
producer
consumer
2.工作模式
https://www.rabbitmq.com/getstarted.html
2.1简单队列模式
https://www.rabbitmq.com/tutorials/tutorial-one-java.html
不需要指定交换机
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
</dependency>
package com.zhenzhen.demo.springboot.rabbitmq.simplemodel;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Channel;
public class Send {
private final static String QUEUE_NAME = "hello";
public static void main(String[] argv) throws Exception {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("xxx");
factory.setPort(5672);
factory.setUsername("xxx");
factory.setPassword("xxx");
try (Connection connection = factory.newConnection();
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 + "'");
}
}
}
package com.zhenzhen.demo.springboot.rabbitmq.simplemodel;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.DeliverCallback;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
public class Recv {
private final static String QUEUE_NAME = "hello";
public static void main(String[] args) throws IOException, TimeoutException {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("xxx");
factory.setPort(5672);
factory.setUsername("xxx");
factory.setPassword("xxx");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
DeliverCallback deliverCallback = (consumerTag, delivery) -> {
String message = new String(delivery.getBody(), "UTF-8");
System.out.println(" [x] Received '" + message + "'");
};
channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> { });
}
}
2.2工作队列模式
多个消费者,任务会分配给不同的消费着
2.3发布订阅模式
多个订阅者者,消息会发布给每一个订阅者
不需要指定routingkey
需要先创建交换机,类型选择广播fanout
2.4路由模式
交换机设置为route模式
发送着发送时指定routingkey,消费者消费消息的时候指定routingkey,只有发送者和消费者的routingkey相同时
消息才能发送成功
2.5Topic模式
路由模式指定所有的key太繁琐,Topic模式可以使用通配符模式
3.消息确认机制
comfirm 收到了消息,ack 接收了,nack mq故障无法接收
return 接收了消息,但是无法找到消费者