zoukankan      html  css  js  c++  java
  • RabbitMQ:Direct Exchange

    一.相关概念

    Exchange:接收消息,并根据路由键转发消息到所绑定的队列。

    属性:

      name:名称

      type:交换机类型direct/topic/fanout/headers

      durability:是否需要持久化

      auto delete:当最后一个绑定到Exchange上的队列删除后,自动删除该Exchange

      internal:当前Exchange是否用于RabbitMQ内部使用,默认为false

      Arguments:扩展参数,用于扩展AMQP协议自制使用。

    二.Direct Exchange

    所有发送到Direct Exchange的消息会被转发到RoutingKey中指定的QUEUE.

    注意:Direct模式使用RabbitMQ自带的Exchange:Default Exchange,所以不需要将Exchange进行任何绑定操作。队列名和routingkey必须完全匹配,消息才能被队列接收。

    三.消费者

        public static void main(String[] args) throws IOException, TimeoutException, InterruptedException {
            //创建一个连接工厂
            ConnectionFactory connectionFactory = new ConnectionFactory();
            connectionFactory.setHost("192.168.10.132");
            connectionFactory.setPort(5672);
            connectionFactory.setVirtualHost("/");
            //创建连接
            Connection connection = connectionFactory.newConnection();
            //通过连接创建一个Channel
            Channel channel = connection.createChannel();
            //创建一个队列
            String exchangeName = "test_direct_exchange";
            String exchangeType = "direct";
            String queueName = "direct";
            String routingKey = "test.direct";
            String routingKey2 = "direct";
            //声明一个交换机
            channel.exchangeDeclare(exchangeName,exchangeType,true,false,false,null);
            //声明一个队列
            channel.queueDeclare(queueName,false,false,false,null);
            //建立绑定关系
            channel.queueBind(queueName,exchangeName,routingKey);
            channel.queueBind(queueName,exchangeName,routingKey2);
            //创建一个消费者
            QueueingConsumer consumer = new QueueingConsumer(channel);
            //设置Channel
            channel.basicConsume(queueName,true,consumer);
            //获取消息
            while (true){
                QueueingConsumer.Delivery delivery = consumer.nextDelivery();
                String msg = new String(delivery.getBody());
                System.out.println("消费端:"+msg);
            }
    
        }
    

    四.生产者

        public static void main(String[] args) throws IOException, TimeoutException {
            //创建一个连接工厂
            ConnectionFactory connectionFactory = new ConnectionFactory();
            connectionFactory.setHost("192.168.10.132");
            connectionFactory.setPort(5672);
            connectionFactory.setVirtualHost("/");
            //创建连接
            Connection connection = connectionFactory.newConnection();
            //通过连接创建一个Channel
            Channel channel = connection.createChannel();
            //通过Channel发送数据
            channel.basicPublish("test_direct_exchange","direct",null,"test direct exchange".getBytes());
            //关闭连接
            channel.close();
            connection.close();
        }
    

     关系拓扑:

     

     生产者设置routingKey无论传direct或者传test.direct,都可以给消费者发送信息。但是设置其他的,消费者都无法接收消息。

  • 相关阅读:
    序列JSON数据和四种AJAX操作方式
    jquery.validate和jquery.form.js实现表单提交
    JQuery Validate使用总结1:
    HOWTO: Include Base64 Encoded Binary Image Data (data URI scheme) in Inline Cascading Style Sheets (CSS)(转)
    SharePoint 2007 使用4.0 .Net
    动态IP解决方案
    取MS CRM表单的URL
    从Iframe或新开的窗口访问MS CRM 2011(转)
    Toggle or Hidden MS CRM Tab
    Windows 2008下修改域用户密码
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/12972790.html
Copyright © 2011-2022 走看看