RabbitMQ消息队列及各种Exchange类型详解

在这里插入图片描述
关于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 -> { });
    }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值