rabbitmq

mq是一种应用程序对应用程序的典型得生产者-消费者模式得通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。其中较为成熟的MQ产品有IBM WEBSPHERE MQ等等。
mq中数据得传输分为两部分,发送数据和接收数据:

(1)发送数据

定义一个factory:

ConnectionFactory factory = new ConnectionFactory();

设置Host/IP:

factory .setHost("localhost");

定义connection连接:

Connection connection = factory.newConnection();

建立channel渠道:

Channel channel = connection.createChannel();

确定exchangename:

channel.exchangeDeclare(EXCHANGE_NAME, "direct");//以默认为例

定义key名称:

String severity = "info";//以默认为例

发送数据:

channel.queueDeclare(queueName, true, false, false, null);
        channel.queueBind(queueName, EXCHANGE_NAME, severity);

        String message ="hello"//要发送得数据
        channel.basicPublish(EXCHANGE_NAME, severity, null, message.getBytes());

发送完毕,先关channel,再关connection,(遵循先开后关,先关后开得原则)

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

(2)接收数据

定义一个factory:

ConnectionFactory factory = new ConnectionFactory();

设置Host/IP:

factory .setHost("localhost");

定义connection连接:

Connection connection = factory.newConnection();

建立channel渠道:

Channel channel = connection.createChannel();

确定exchangename:

channel.exchangeDeclare(EXCHANGE_NAME, "direct");//必须和发送端得exchangename一样

定义queuename:

String queueName="aa";

定义key名称:

String severity = "info";//必须和发送端的key一样

绑定:

channel.queueBind(queueName,EXCHANGE_NAME,severity );

定义消费者:

QueueingConsumer consumer = new QueueingConsumer (channel);

取消自动确认,改为手动确认:

boolean autoAck = false;
channel.basicConsume(queueName,autoAck,consumer);

死循环接收数据:

while(true){
QueueingConsumerDelivery delivery = consumer.nextDelivery();
String message = new String (delivery .getBody());
channel.basicAck(delivery .getEnvelope().getDeliveryTag(),false);//手动确认消息收到
}

这里写图片描述

备注:

(1)一个MQ右多个exchange,一个exchange可以有多个队列,因此接收数据得时候,必须确保名字相同。
(2)MQ确认消息机制:为了确保消息一定被处理,MQ提供了确认消息,就是在消息处理之后,给服务器一个回馈,服务器会将消息删除,如果消费者超时不回馈,服务器将消息重新发送给其他消费者;
默认是开启得,也就是自动确认,但手动确认比自动确认可靠,因此,首先将autoAck自动确认关闭,等任务执行完之后,手动的去确认(消息接收到就立刻确认,然后再进行数据解析等操作,这样速度比较快!),类似JDBC得autocommit一样。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值