关于RabbitMQ,我们就从这张官网截图来开始说吧!
对于任何一门技术,我们可能都比较关心“what”,“how”,“when”,当然还是那句话,看官方文档。
上图圈出来的一段话就是对我们RabbitMQ的一个大致介绍了,其实说白了就是负责转发消息的。下图给出了一个最简单的消息转发模型,p(producer )为我们的的消息提供方,c(consumer )为消息接收方。
在说exchange之前呢,我们需要先在本机安装我们的RabbitMQ for windows版本(在安装之前呢),然后呢来个最简单的例子,看下RabbitMQ是 怎么工作的
这里呢我们下在windows版本即可,不过在安装RabbitMQ之前呢,必须要先安装indows installer for Erlang,这里旨在说明RabbitMQ的使用,安装部分不做过多赘述(有兴趣的可以私聊我哦!)。
首先code出我们的消息提供者
public class Sender {
private final static String QUEUE_NAME = "hello";
public static void main(String[] args) throws Exception{
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
publis(factory);
}
public static void publis(ConnectionFactory factory ){
Timer time = new Timer();
time.schedule(new TimerTask(){
int num = 1;
@Override
public void run() {
try (Connection connection = factory.newConnection();
Channel channel = connection.createChannel()) {
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String message = df.format(new Date())+"已发布!"+"--------------:"+num;
channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF-8"));
System.out.println(" [x] Sent '" + message + "'");
num++;
} catch (Exception e) {
e.printStackTrace();
}
}
}, 1000, 2000);
}
}
消息接收者代码如下
public class Recv {
private final static String QUEUE_NAME = "hello";
public static void main(String[] argv) throws Exception {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
DeliverCallback deliverCallback = (consumerTag, delivery) -> {
String message = new String(delivery.getBody(), "UTF-8");
System.out.println(" [x] Received '" + message + "'");
};
boolean autoAck = false;
channel.basicConsume(QUEUE_NAME, autoAck, deliverCallback, consumerTag -> { });
}