RabbitMQ Java API编程

创建Maven工程,pom.xml引入依赖

<dependency> 
	<groupId>com.rabbitmq</groupId> 
	<artifactId>amqp-client</artifactId> 
	<version>4.1.0</version> 
</dependency>

生产者

import com.rabbitmq.client.Channel; 
import com.rabbitmq.client.Connection; 
import com.rabbitmq.client.ConnectionFactory; 
public class MyProducer { 
private final static String QUEUE_NAME = "ORIGIN_QUEUE"; 
public static void main(String[] args) throws Exception { 	
		ConnectionFactory factory = new ConnectionFactory(); 
		// 连接IP 
		factory.setHost("127.0.0.1"); 
		// 连接端口 
		factory.setPort(5672); 
		// 虚拟机 
		factory.setVirtualHost("/"); 
		// 用户 
		factory.setUsername("guest");
		factory.setPassword("guest"); 
		// 建立连接 
		Connection conn = factory.newConnection(); 
		// 创建消息通道 
		Channel channel = conn.createChannel(); 
		String msg = "Hello world, Rabbit MQ"; 
		// 声明队列 // String queue, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> arguments 
		channel.queueDeclare(QUEUE_NAME, false, false, false, null); 
		// 发送消息(发送到默认交换机AMQP Default,Direct) 
		// 如果有一个队列名称跟Routing Key相等,那么消息会路由到这个队列 
		// String exchange, String routingKey, BasicProperties props, byte[] body 
		channel.basicPublish("", QUEUE_NAME, null, msg.getBytes()); channel.close(); conn.close(); 
	} 
}

消费者

import com.rabbitmq.client.*;
 import java.io.IOException;
 public class MyConsumer { 
	private final static String QUEUE_NAME = "ORIGIN_QUEUE";
	public static void main(String[] args) throws Exception { 
	ConnectionFactory factory = new ConnectionFactory();
	// 连接IP 
	factory.setHost("127.0.0.1");
	// 默认监听端口 
	factory.setPort(5672);
	// 虚拟机 
	factory.setVirtualHost("/");
	// 设置访问的用户 
	factory.setUsername("guest");
	factory.setPassword("guest");
	// 建立连接 
	Connection conn = factory.newConnection();
	// 创建消息通道 
	Channel channel = conn.createChannel();
	// 声明队列 
// String queue, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> arguments 
	channel.queueDeclare(QUEUE_NAME, false, false, false, null);
	System.out.println(" Waiting for message....");
	// 创建消费者 
	Consumer consumer = new DefaultConsumer(channel) { 
		@Override 
		public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { 
		String msg = new String(body, "UTF-8");
	 	System.out.println("Received message : '" + msg + "'");
 		} 
 	};
	// 开始获取消息 
	// String queue, boolean autoAck, Consumer callback 	
	channel.basicConsume(QUEUE_NAME, true, consumer);
 	} 
 }

参数说明

声明交换机的参数
String type:交换机的类型,direct, topic, fanout中的一种。
boolean durable:是否持久化,代表交换机在服务器重启后是否还存在。
声明队列的参数
boolean durable:是否持久化,代表队列在服务器重启后是否还存在。
boolean exclusive:是否排他性队列。排他性队列只能在声明它的Connection中使用,连接断开时自动删除。
boolean autoDelete:是否自动删除。如果为true,至少有一个消费者连接到这个队列,之后所有与这个队列连接
的消费者都断开时,队列会自动删除。
Map<String, Object> arguments:队列的其他属性,例如x-message-ttl、x-expires、x-max-length、x-maxlength-bytes、x-dead-letter-exchange、x-dead-letter-routing-key、x-max-priority。
消息属性BasicProperties
消息的全部属性有14个,以下列举了一些主要的参数:
参数 释义
Map<String,Object> headers 消息的其他自定义参数
Integer deliveryMode 2 持久化,其他:瞬态
Integer priority 消息的优先级
String correlationId 关联ID,方便RPC相应与请求关联
String replyTo 回调队列
String expiration TTL, 消息过期时间,单位毫秒

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值