一、简介
rabbitMQ是什么,怎么用,怎么安装,网上文档一大把,请自行百度。本文给出的代码是rabbitMQ的fanout交换机模式,最原生的java代码,如果需要使用其他模式的rabbitMQ,请自行更改相应部分代码。
二、代码
rabbitMQ参数对象
public class RabbitConnPara {
private String host;
private int port;
private String virtualHost;
private String userName;
private String passWord;
private String exchanger;
private String Routing_key;
private String durable;
--------省略set,get------------
}
建立rabbitiMQ连接
public class RabbitConnection {
public static Connection getConnection(RabbitConnPara rabConPar) throws Exception{
ConnectionFactory factory=new ConnectionFactory();
//设置连接信息
factory.setHost(rabConPar.getHost());
factory.setPort(rabConPar.getPort());
factory.setUsername(rabConPar.getUserName());
factory.setPassword(rabConPar.getPassWord());
factory.setVirtualHost(rabConPar.getVirtualHost());
Connection conn=factory.newConnection();
//返回连接对象
return conn;
}
}
向交换机发送数据
public class Send {
private final static String EXCHANGE_NAME = "exchange";
public static Connection getConnection() throws Exception {
//定义连接工厂
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("rabbitMQ地址");
factory.setPort(端口);
//设置vhost
factory.setUsername("用户名");
factory.setPassword("密码");
//通过工厂获取连接
Connection connection = factory.newConnection();
return connection;
}
//创建队列,发送消息
public static void main(String[] args) throws Exception {
//获取连接
Connection connection = Send.getConnection();
//创建通道
Channel channel = connection.createChannel();
//消息内容
String message = "Hello World!";
// 声明转发器和类型,可以放在消费者类
channel.exchangeDeclare(EXCHANGE_NAME, "fanout" );
// 往转发器上发送消息
for(int i=0;i<2000;i++) {
channel.basicPublish(EXCHANGE_NAME, "", null, message.getBytes());
System.out.println("发送消息:" + message);
}
//关闭连接和通道
channel.close();
connection.close();
}
从交换机获取数据
public class Receive {
// 消费者消费消息
public static void main(String[] args) throws Exception {
// //获取连接和通道
Connection connection = Send.getConnection();
Channel channel = connection.createChannel();
// 创建一个非持久的、唯一的且自动删除的队列
String queueName = channel.queueDeclare().getQueue();
// 为转发器指定队列,设置binding
channel.queueBind(queueName, "exchange", "");
QueueingConsumer consumer = new QueueingConsumer(channel);
// 指定接收者,第二个参数为自动应答,无需手动应答
channel.basicConsume(queueName, true, consumer);
while (true)
{
QueueingConsumer.Delivery delivery = consumer.nextDelivery();
String message = new String(delivery.getBody());
System.out.println(message);
}
}
}