rabbitmq原理及其使用(生产者)

  • Post author:
  • Post category:其他


1.rabbitmq的原理图:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

每个Channel都是一个小的Tcp socket连接,刚开始做的都是socket连接事情,注意队列也是个数据结构,需要主动建立,channel本身也要设置。


package com.xuecheng.test.rabbitmq;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class Producer01 {
    private  static final String QUEUE="helloworld";

    public static void main(String[] args) {
        ConnectionFactory connectionFactory=new ConnectionFactory();
        connectionFactory.setHost("127.0.0.1");
        connectionFactory.setPort(5672);//用于本消费者连接主机(MQ)哪个端口进行通信
        connectionFactory.setUsername("guest");
        connectionFactory.setPassword("guest");
        //设置虚拟机,一个mq服务可以设置多个虚拟机,每个虚拟机相当于一个独立的Mq
        connectionFactory.setVirtualHost("/");
        Connection connection = null;
        try {
         connection=   connectionFactory.newConnection();
         //创建会话通道,生产者和mq服务所有通信都在channel通道中完成
            Channel channel= connection.createChannel();
            //声明队列,如果队列在mq中没有则要创建
            //        * 参数:String queue, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> arguments
            //             * 1、队列名称
            //             * 2、是否持久化,true表示持久化,当mq重启之后此队列还在
            //               3、是否独占连接,队列里只允许在该连接中访问,如果connection连接关闭队列则自动删除,如果此参数设置true可用于临时队列的创建
            //               4、autoDelete 自动删除、队列不在使用时是否自动删除此队列,如果将此参数和exclusive参数设置为true就可以实现临时队列(队里不用了就自动删除)
            //              5、可以设置一个队列的扩展参数,比如:可以设置存货时间
            channel.queueDeclare(QUEUE,true,false,false,null);
            //发送消息,指定交换机
            //参数String exchange, String routingKey, BasicProperties props, byte[] body
            /**
             * 1、exchange 、交换机,如果不指定将使用Mq的默认交换机(设置为空串)
             * 2、routingkey、路由key,交换机根据路由key来将消息转发到指定的队列、如果使用默认交换机、routingkey设置为队列的名称
             * 3、props,消息的属性
             * 4、消息体(内容)
             */
            String message="hello world,i am producer";
            channel.basicPublish("",QUEUE,null,message.getBytes());
            System.out.println("send to mq "+ message);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {

        }
    }
}

打开localhost:15672可以看到,生产者端口52067(系统自定义给定)向rabbitmq提供给生产者的通信端口发了一个信息

在这里插入图片描述

默认的交换机处理了这条信息

在这里插入图片描述

队伍queue helloworld有一条代发信息

在这里插入图片描述

在队伍中可以查看这个待发信息到底是什么

在这里插入图片描述

在这里插入图片描述



版权声明:本文为m0_37487653原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。