rabbitMQ的模式

 

 RabbitMQ的原理
    (1)producer:生产者 发生的消息
    (2)Connection: 连接对象,通过TCP协议建立生产者和RabbitMQ服务器连接。非常耗资。
    (3)Channel:信道。 虚拟的连接。通过该连接可以发送消息,而且耗资很少。
    (4)exchange: 交换机。 把信息转发到对应的队列里。它不负责消息的存放。
    (5)Queue:队列,用于存储消息。
    (6)Binding:用户绑定交换机和队列。
    (7)Broker: 理解为rabbitMQ服务器。
    (8)Virtual Host: 虚拟主机: 一个RabbitMQ服务器中由很多虚拟主机,而每一个虚拟主机,都是独立的。里面都要自己的exchange,queue.

 

简单模式

  p 【product】: 生产者  发生消息的
   红色[queue]: 队列。  存储消息的
   C [consumer]: 消费者  消费消息

生产者代码

public class Product {
    public static void main(String[] args)throws  Exception {
        //创建连接工厂 --配置连接信息
        ConnectionFactory factory=new ConnectionFactory();
        factory.setHost("192.168.247.129");
        //创建连接对象Connection
        Connection connection=factory.newConnection();
        Channel channel = connection.createChannel();

        //创建队列
        /**
         * String queue, 队列的名称
         */
        channel.queueDeclare("aaa_queue",true,false,false,null);
        //发生消息

        String msg="滚吧";
        channel.basicPublish("","aaa_queue",null,msg.getBytes());
    }
}

消费者代码

public class Consumer {
    public static void main(String[] args) throws Exception{
        //创建连接工厂 --配置连接信息
        ConnectionFactory factory=new ConnectionFactory();
        factory.setHost("192.168.247.129");
        Connection connection=factory.newConnection();
        Channel channel = connection.createChannel();

        //接受消息

        DefaultConsumer callback=new DefaultConsumer(channel){
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                //body 接受的信息
                System.out.println("消息的内容:"+new String(body));
            }
        };
        channel.basicConsume("aaa_queue",true,callback);

    }
}

工作者模式

 特点:一个生产,多个消费,统一队列,消费是竞争关系

生产者代码

public class Product {
    public static void main(String[] args)throws  Exception {
        //创建连接工厂 --配置连接信息
        ConnectionFactory factory=new ConnectionFactory();
        factory.setHost("192.168.247.129");
        //创建连接对象Connection
        Connection connection=factory.newConnection();
        Channel channel = connection.createChannel();

        //创建队列
        channel.queueDeclare("aaa_queue_work",true,false,false,null);
        //发生消息
        for(int i=0;i<10;i++) {
            String msg = "哈哈哈"+i;
            channel.basicPublish("", "aaa_queue_woou", null, msg.getBytes());
        }
        //生产者这里可以管理资源  消费者不能关闭资源。
        channel.close();
        connection.close();

    }
}

消费者(1)

public class Consumer01 {
    public static void main(String[] args) throws Exception{
        //创建连接工厂 --配置连接信息
        ConnectionFactory factory=new ConnectionFactory();
        factory.setHost("192.168.247.129");
        //创建连接对象Connection
        Connection connection=factory.newConnection();
        //创建信道
        Channel channel = connection.createChannel();

        //接受消息
        /**
         * (String queue, 队列的名称
         *  boolean autoAck, 是否自动确认
         *  Consumer callback: 回调方法 当队列中存在信息后 会自动触发回调函数。
         */
        DefaultConsumer callback=new DefaultConsumer(channel){
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                //body 接受的信息
                try {
                    Thread.sleep(1000L);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("消费者01:"+new String(body));
            }
        };
        channel.basicConsume("aaa_queue_woou",true,callback);

    }
}

消费者(2)

public class Consumer02 {
    public static void main(String[] args) throws Exception{
        //创建连接工厂 --配置连接信息
        ConnectionFactory factory=new ConnectionFactory();
        factory.setHost("192.168.247.129");
        Connection connection=factory.newConnection();
        Channel channel = connection.createChannel();

        //接受消息

        DefaultConsumer callback=new DefaultConsumer(channel){
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                //body 接受的信息
                try {
                    Thread.sleep(1000L);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("消费者1号:"+new String(body));
            }
        };
        channel.basicConsume("aaa_queue_woou",true,callback);

    }
}

发布订阅模式

一个 生产,多个消费,多个队列,(x)交换机

public class Product {
    public static void main(String[] args)throws  Exception {
        //创建连接工厂 --配置连接信息
        ConnectionFactory factory=new ConnectionFactory();
        factory.setHost("192.168.247.129");
        Connection connection=factory.newConnection();
        Channel channel = connection.createChannel();


        channel.queueDeclare("aaa_queue_fanout01",true,false,false,null);
        channel.queueDeclare("aaa_queue_fanout02",true,false,false,null);

        //创建交换机
        /**
         * String exchange,交换机的名称
         * BuiltinExchangeType type, 交换机的类型
         * boolean durable:是否持久化
         */
        channel.exchangeDeclare("ban129_exchange", BuiltinExchangeType.FANOUT,true);

        channel.queueBind("aaa_queue_fanout01","ban129_exchange","");
        channel.queueBind("aaa_queue_fanout02","ban129_exchange","");
        //发生消息

        for(int i=0;i<10;i++) {
            String msg = "订阅模式"+i;
            channel.basicPublish("aaa_exchange", "", null, msg.getBytes());
        }
        //生产者这里可以管理资源  消费者不能关闭资源。
        channel.close();
        connection.close();

    }
}

消费者

public class Consumer01 {
    public static void main(String[] args) throws Exception{
        ConnectionFactory factory=new ConnectionFactory();
        factory.setHost("192.168.247.129");
        Connection connection=factory.newConnection();
        Channel channel = connection.createChannel();

        DefaultConsumer callback=new DefaultConsumer(channel){
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                //body 接受的信息
                try {
                    Thread.sleep(1000L);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("消费者1号:"+new String(body));
            }
        };
        channel.basicConsume("aaa_queue_fanout01",true,callback);

    }
}

路由模式

 

public class Product {
    public static void main(String[] args)throws  Exception {
        //创建连接工厂 --配置连接信息
        ConnectionFactory factory=new ConnectionFactory();
        factory.setHost("192.168.247.129");
        Connection connection=factory.newConnection();
        Channel channel = connection.createChannel();

        //创建队列
        channel.queueDeclare("aaa_queue_direct01",true,false,false,null);
        channel.queueDeclare("aaa_queue_direct02",true,false,false,null);

        //创建交换机
        channel.exchangeDeclare("aaa_exchange_direct", BuiltinExchangeType.DIRECT,true);

        channel.queueBind("aaa_queue_direct01","ban129_exchange_direct","error");


        channel.queueBind("aaa_queue_direct02","ban129_exchange_direct","info");
        channel.queueBind("aaa_queue_direct02","ban129_exchange_direct","error");
        channel.queueBind("aaa_queue_direct02","ban129_exchange_direct","warning");

        for(int i=0;i<10;i++) {
            String msg = "路由模式"+i;
            channel.basicPublish("aaa_exchange_direct", "error", null, msg.getBytes());
        }
        //生产者这里可以管理资源  消费者不能关闭资源。
        channel.close();
        connection.close();
    }
}

topic主体模式

 *: 统配一个单词。
     #: 统配n个单词
 

public class Product {
    public static void main(String[] args)throws  Exception {
        //创建连接工厂 --配置连接信息
        ConnectionFactory factory=new ConnectionFactory();
        factory.setHost("192.168.247.129");
        Connection connection=factory.newConnection();
        Channel channel = connection.createChannel();

        //创建队列

        channel.queueDeclare("aaa_queue_topic01",true,false,false,null);
        channel.queueDeclare("aaa_queue_topic02",true,false,false,null);

        //创建交换机

        channel.exchangeDeclare("aaa_exchange_topic", BuiltinExchangeType.TOPIC,true);


        channel.queueBind("aaa_queue_topic01","ban129_exchange_topic","*.orange.*");


        channel.queueBind("aaa_queue_topic02","ban129_exchange_topic","*.*.rabbit");
        channel.queueBind("aaa_queue_topic02","ban129_exchange_topic","lazy.#");


        //发生消息

        for(int i=0;i<10;i++) {
            String msg = "德玛西亚!!!!"+i;
            channel.basicPublish("aaa_exchange_topic", "lazy.orange.rabbit", null, msg.getBytes());
        }
        //生产者这里可以管理资源  消费者不能关闭资源。
        channel.close();
        connection.close();

    }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值