Grundlegende Verwendung der nativen JAVA-API von Rabbitmq

Rabbitmq主要的组件要记住并且要知道它们之间的关系

1.broker mq服务器用来存队列,交换机等消息

2.交换机 负责将消息转发给队列

3.队列 存储消息的容器

4.Connection 用来连接mq服务器

5.channel信道 负责与mq服务器交互通信,如:发送消息到mq服务器,消费队列,创建交换机,创建队列等操作

6.VirtualHost 分区操作,类似与mysql的分库操作进行数据的独立 

关系
交换机和队列关系-多对多
1.一个交换机可以绑定多个队列,一个队列可以被多个交换机绑定

Connection和信道关系
1.一个连接可以创建多个信道

Der häufig verwendete Rabbitmq-Modus

1. Einfacher Modus

2. Arbeitswarteschlangenmodus

3.Fanout-Veröffentlichungs- und Abonnementmodus

4. Direkter Routing-Modus

5. Themen-Wildcard-Routing-Muster

Werkzeug

public class RabbitMQUtils {
    private Channel channel;
    private Connection connection;
    public  Channel getChannel() throws IOException, TimeoutException {
        //配置连接参数创建工厂
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("192.168.93.132");
        factory.setUsername("admin");
        factory.setPassword("admin");
        factory.setVirtualHost("/");

        Connection connection = factory.newConnection();

        this.connection=connection;
        this.channel=connection.createChannel();
        return channel;
    }

    public void close(){
        if(channel != null){
            try {
                channel.close();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (TimeoutException e) {
                e.printStackTrace();
            }
        }
        if(connection != null){
            try {
                connection.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

1. Einfacher Modus

/**
 * 简单模式一对一 一个生产者对应一个消费者
 */
public class ProducerHello {
    private final static String QUEUE_NAME="hello";
    public static void main(String[] args) throws Exception {

        RabbitMQUtils rabbitMQUtils = new RabbitMQUtils();
        Channel channel = rabbitMQUtils.getChannel();

           /**
            * 创建队列,1.如果该队列存在就不创建,2.如果队列不存在自动创建,3.如果队列存在但是和下列参数不匹配就报错删除原队列即可
            *queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> arguments)
            * queue 队列名称
            * durable 是否支持持久化默认false
            * exclusive 该队列是否只能由当前channel使用
            * autoDelete 消费者断开连接以后自动删除消息false不删除
            * arguments 其他参数
            */
           channel.queueDeclare(QUEUE_NAME,false,false,false,null);


           // 以下是消费者代码=========================================================================================
           /**
            *  basicPublish(String exchange, String routingKey, BasicProperties props, byte[] body)
            *  exchange 发送到哪个交换机
            *  routingKey 路由k是谁
            *  props 其他参数信息
            *  body 发送的消息
            */
        for (int i = 0; i <10 ; i++) {
            String message="hello world"+i;
            channel.basicPublish("",QUEUE_NAME,null,message.getBytes());
        }

        //处理正常消息的匿名内部类
        DeliverCallback deliverCallback = (consumerTag, delivery)->{
            String message = new String(delivery.getBody());
            System.out.println("队列消费成功:"+message);
        };
        //处理失败消息的匿名内部类
        CancelCallback cancelCallback = (consumerTag)->{
            System.out.println("队列消费失败"+new String(consumerTag.getBytes()));
        };
        channel.basicConsume(QUEUE_NAME,false,deliverCallback,cancelCallback);

    }
}

Supongo que te gusta

Origin blog.csdn.net/qq_42058998/article/details/128601042
Recomendado
Clasificación