JAVA-RabbitMQ使用示例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/belovehejian/article/details/75088169

准备工作

导入相关的jar包,一般maven依赖的话只要在pom文件当中加入下面坐标就好。
<dependency>
    <groupId>com.rabbitmq</groupId>
    <artifactId>amqp-client</artifactId>
    <version>4.0.0</version>
</dependency>

HelloWorld示例

生产者

package com.xh.rabbitmq;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
public class Producer {
	public static void main(String[] args) throws IOException, TimeoutException {	
		//实例化工厂
		ConnectionFactory factory = new ConnectionFactory();
		//设置相关参数,地址,端口,账号,密码
		factory.setHost("localhost");
		factory.setPort(5672);
		factory.setUsername("guest");
		factory.setPassword("guest");
		//获取connection
		Connection conn = factory.newConnection();
		//获取channel
		Channel channel = conn.createChannel();
		//创建队列		1-队列名称	2-队列是否持久化	3-是否是排他队列	4-使用完之后是否删除此队列	5-其他属性
		channel.queueDeclare("hello", false, false, false, null);
		//创建路由		1-路由名称	2-路由类型
		channel.exchangeDeclare("myexchange", "topic");
		//绑定路由队列	1-队列名称	2-路由名称	3-routing key		
		channel.queueBind("hello", "myexchange", "shensha");
		//发送消息		1-路由名称	2-routing key	3-其他信息	4-消息字节数组
		channel.basicPublish("myexchange", "shensha", null, "HelloWorld".getBytes());
		//关闭资源
		channel.close();
		conn.close();
	}
}
 
 
生产者在发送消息的时候,相关参数还可以设置更多.具体参数值根据实际开发环境输入.每次发送消息的时候都需要创建socket连接,这是需要昂贵的代价的.建议使用连接池来实现获取连接,使用 apache的commons-pool2来实现.发送完毕之后记得关闭资源连接.

消费者
package com.xh.rabbitmq;

import java.io.IOException;
import com.rabbitmq.client.AMQP.BasicProperties;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;

public class Consumer {
	public static void main(String[] args) {
		// 实例化工厂
		ConnectionFactory factory = new ConnectionFactory();
		// 设置相关参数,地址,端口,账号,密码
		factory.setHost("localhost");
		factory.setPort(5672);
		factory.setUsername("guest");
		factory.setPassword("guest");
		try {
			// 获取connection
			Connection conn = factory.newConnection();
			// 获取channel
			Channel channel = conn.createChannel();
			// 创建队列 1-队列名称 2-队列是否持久化 3-是否是排他队列 4-使用完之后是否删除此队列 5-其他属性
			channel.queueDeclare("hello", false, false, false, null);
			//消费消息.	1-消费队列	2-是否自动发送消息回执	3-回调函数
			channel.basicConsume("hello", true, new DefaultConsumer(channel){
				
				@Override
				public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body)
						throws IOException {
					String message = new String(body, "UTF-8");
					System.out.println("接收到的消息为: " + message);
				}
				
			});
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

消费者在消费的时候,也需要尝试创建队列.因为如果消费者消费的队列不存在的话,会出现异常情况.如果消费者创建的队列已经存在的话,RabbitMQ不会做任何事情.在进行消费的时候,需要设定自动发送回执ACK给服务端,当服务端接收到这个回执之后,确认消费者已经成功消费该消息时,RabbitMQ会从消息队列当中删除该消息.
回调函数,是重写的接口当中的方法,进行接收消息,以便做进一步的处理.
消费者不用关闭资源连接,因为它要一直监听队列,当队列当中有消息进来的时候,会消费该消息.

运行该示例,生产者控制台为:

消费者控制台为:

以上是JAVA简单的RabbitMQ示例.

猜你喜欢

转载自blog.csdn.net/belovehejian/article/details/75088169