rabbitmq消息持久化,避免异常状况下,消息会丢失

1) 使用python包amqpjava

from amqp.basic_message import Message
from amqp.connection import Connection
exchange_name = "pythontest"
msg = "this is a amqp test msg"
conn = Connection(host=host, userid=username, password=password, heartbeat=60)
channel_id = random.randint(1, conn.channel_max)
ch = conn.channel(channel_id)
ch.exchange_declare(exchange_name, 'topic', durable=True, auto_delete=False )
ch.basic_publish(Message(msg,delivery_mode=2), exchange=exchange_name)
print "succ"

注意须要设置 delivery_mode=2 python

2) 使用pika包json

channel.basic_publish(exchange='', routing_key='task_queue', body=message, 
                                    properties=pika.BasicProperties( delivery_mode= 2 ))
 ### delivery_mode= 2 

3) 使用Javaapp

AMQP.BasicProperties defaultProp = new AMQP.BasicProperties.Builder().deliveryMode(2).contentType("application/json").contentEncoding("utf-8").build();

注意deliveryMode(2)dom

Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
// queueDeclare参数说明
// 1:queuename
// 2:durable 是否持久化
// 3:exclusive
// 4:autoDelete 是否自动删除
// 5:arguments
channel.queueDeclare(QUEUE_NAME,true,false,false,null);
channel.exchangeDeclare("javatest", "topic",true);
channel.basicPublish("",QUEUE_NAME,defaultProp,message.getBytes() ); // defaultProp注意使用.
channel.close();
connection.close();

 

备注:在queueDeclare的时候须要设置为持久化.ui

在发送消息的时候,须要设置deliveryMode(2) this

相关文章
相关标签/搜索