3.16RabbitMQ入门实战

RabbitMQ基本概念:

RabbitMQ是遵循AMQP(Advanced Message Queue Protocol)协议,即高级消息队列协议实现的,AMQP协议是一个标准协议,如果想写一个原生的消息队列的话也可以遵守该协议去开发。

3.16RabbitMQ入门实战_第1张图片

结合AMQP协议的模型图我们可以去理解RabbitMQ的运行机制:

生产者(Publisher,图中最左边):发送消息到交换机

交换机(Exchange):接收消息,并决定转发消息到对应的队列

路由(Routes):转发的通道,虚拟连接

在很多AMQP详解中其实是Binding,表示交换机和队列之间的虚拟连接,Binding存在一个Binding Key,其会与生产者和交换机间省略的Routing Key进行比对,当两者一致时交换机才会将消息转发到对应的队列中,整个过程采用的是完全匹配、单播的模式。

队列(Queue):存储消息

消费者(Consumer,图中最右边):从某个队列中获取消息


RabbitMQ安装:

官网下载网址:Installing on Windows | RabbitMQ

RabbitMQ依赖于Erlang语言(一种非常高效的语言),

安装RabbitMQ时如果电脑没有装Erlang会自动弹出Erlang的安装网址。

之后需要安装RabbitMQ监控面板,在安装目录下找到sbin文件夹进入cmd,输入以下命令:

rabbitmq-plugins.bat enable rabbitmq_management

本质就是启动该目录下的rabbitmq-plugins脚本,但这个地方我报错

Failed to create cookie file xxx(路径)

原因可能是我之前修改过电脑的用户,导致当前用户没有写入用户文件的权限。

解决办法:找到报错的用户文件夹,在“属性-安全”中勾选写入权限即可。 

 然后访问http://localhost:15672就可以进行RabbitMQ的监控与管理,初始用户名密码都是guest。

但是我这里访问不到,排查后发现RabbitMQ没有启动,win+r在服务中启动RabbitMQ即可


单生产者消息队列:

public class SingleProducer {

    private final static String QUEUE_NAME = "hello";

    public static void main(String[] argv) throws Exception {
        //创建连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
//        factory.setUsername();
//        factory.setPassword();
//        factory.setPort();
        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(StandardCharsets.UTF_8));
            System.out.println(" [x] Sent '" + message + "'");
        }
    }
}

 Channel(频道):消息队列的client(类似redisClient,jdbcClient),提供了和消息队列server建立通信的传输方法,利用Channel操作RabbitMQ。

你可能感兴趣的:(rabbitmq,分布式)