RabbitMQ 二 简单消息队列
首先要在服务段后台配置好用户与vhost,并且用户与vhost绑定授权才可以进行队列的操作。
上图表示这个vhost是与用户名为mengzhaokun绑定的,接下来就可以进行简单消息队列的操作了。由于我们使用的client是5.6版本,所以有些类与老版本是不同的。
我们的简单消息队列分为三个类,一个工具类,一个生产者,一个消费者。
public class ConnectionUtil {
public static Connection getConnection() throws IOException, TimeoutException {
//定义一个链接工厂
ConnectionFactory factory = new ConnectionFactory();
//设置服务地址
factory.setHost("127.0.0.1");
//设置端口
factory.setPort(5672);
//vhost数据库
factory.setVirtualHost("mengzhaokun_db1");
//用户名
factory.setUsername("mengzhaokun");
//密码
factory.setPassword("mengzhaokun5");
return factory.newConnection();
}
}
上图中就是我编写的一个工具类,这个工具类是链接rabbitmq的基本操作,并且这个方法是静态的,所以我们后面再写生产者,消费者的时候就不需要重复写这些信息了。
public class Procuder {
private static final String QUEUE_NAME = "test_simple_queue";
@Test
public void test1() throws IOException, TimeoutException {
//获取一个链接
Connection connection = ConnectionUtil.getConnection();
System.out.println(connection);
//创建一个通道,从链接获取一个通道
Channel channel = connection.createChannel();
//创建队列声明
channel.queueDeclare(QUEUE_NAME,false,false,false,null);
String msg = "你好,我是rabbitmq,很高兴见到你孟兆坤!!!!!";
channel.basicPublish("",QUEUE_NAME,null,msg.getBytes());
System.out.println("--send msg:"+msg);
channel.close();
connection.close();
}
}
上图就是一个生产者负责生产消息。
public class Consumer {
private static final String QUEUE_NAME = "test_simple_queue";
@Test
public void test1() throws IOException, TimeoutException {
//获取链接
Connection connection = ConnectionUtil.getConnection();
//创建频道
Channel channel = connection.createChannel();
while(true){
channel.queueDeclare(QUEUE_NAME,false,false,false,null);
com.rabbitmq.client.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("消费端接受到的消息:"+msg);
}
};
channel.basicConsume(QUEUE_NAME,true,consumer);
}
}
}
上图是一个消费者,负责消费消息。