RabbitMQ学习二

简单队列 hello world
在这里插入图片描述

java操作获取MQ连接,因为每次都要获取连接所以这里抽取出一个公共方法

//定义连接工厂
    ConnectionFactory factory = new ConnectionFactory();
    //设置服务地址
    factory.setHost("127.0.0.1");
    //端口
    factory.setPort(5672);//amqp协议 端口 类似与mysql的3306
    //设置账号信息,用户名、密码、vhost
    factory.setVirtualHost("/fox");
    factory.setUsername("user_fox");
    factory.setPassword("123456");
    // 通过工程获取连接
    Connection connection = factory.newConnection();
    return connection;
}	

生产者发送数据到消息队列
生产者:

public class SendMQ {
private static final String QUEUE_NAME="QUEUE_simple";

@Test
public void sendMg() throws Exception {
    /*获取一个链接*/
    Connection connection  = ConnectionUtils.getConnection();

    /*从链接中创建管道*/
   Channel channel =  connection.createChannel();

    //创建队列 (声明) 因为我们要往队列里面发送消息,这是后就得知道往哪个队列中发送,就好比在哪个管子里面放水
    Boolean durable = false; //消息持久化的 设置为true是开启消息持久化
    channel.queueDeclare(QUEUE_NAME, false, false, false, null);

    String msg = "Hello Simple QUEUE !";

    //第一个参数是exchangeName(默认情况下代理服务器端是存在一个""名字的exchange的,
    //因此如果不创建exchange的话我们可以直接将该参数设置成"",如果创建了exchange的话
    //我们需要将该参数设置成创建的exchange的名字),第二个参数是路由键
    channel.basicPublish("",QUEUE_NAME,null,msg.getBytes());
    System.out.println("--------Send ms:" + msg);

    channel.close();
    connection.close();
}
}

在这里插入图片描述

消费者:

public class Consumer {
private static final String QUEUE_NAME = "QUEUE_simple";
public static void main(String[] args) throws Exception {
    Connection connection = ConnectionUtils.getConnection();
    Channel channel = connection.createChannel();

    DefaultConsumer consumer = new DefaultConsumer(channel){
        @Override
        public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
            String message = new String(body,"utf-8");
            System.out.println(" [x] Received '" + message + "'");
        }
    };
    //监听队列
    channel.basicConsume(QUEUE_NAME, true, consumer);
}
}

简单队列的不足
耦合性高 生产消费一一对应(如果有多个消费者想都消费这个消息,就不行了) 队列名称变更时需要同时更改

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值