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

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有一条代发信息
在这里插入图片描述
在队伍中可以查看这个待发信息到底是什么
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值