特点:
一个生产者对应一个消费者,模型如图:
不足之处:耦合性高,一个生产者对应一个消费者,可用性差。
1、获取connection工具类
package com.june.rabbitmq.util;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
public class ConnectionUtil {
/**
* 获取MQ的连接
* @author june
* @return
*/
public static Connection getConnection() throws IOException, TimeoutException {
ConnectionFactory factory = new ConnectionFactory();
//设置MQ服务信息
factory.setHost("127.0.0.1");
//AMQP协议端口 5672
factory.setPort(5672);
//数据库
factory.setVirtualHost("/virtual_mmr");
//用户名
factory.setUsername("dev");
//密码
factory.setPassword("dev");
return factory.newConnection();
}
}
2、消息生产者(发送者)类
package com.june.rabbitmq.simple;
import com.june.rabbitmq.util.ConnectionUtil;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
public class Send {
private static final String QUEUE_NAME = "june_simple_queue";
public static void main(String[] args) {
try {
Connection connection = ConnectionUtil.getConnection();
//获取一个通道
Channel channel = connection.createChannel();
//创建队列声明
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
String msg = "simple june hello !";
channel.basicPublish("", QUEUE_NAME, null, msg.getBytes());
System.out.println("******send message****");
channel.close();
connection.close();
} catch (IOException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
}
}
}
3、消息消费者类(旧方式,已过期)
package com.june.rabbitmq.simple;
import com.june.rabbitmq.util.ConnectionUtil;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.QueueingConsumer;
import java.io.IOException;
import java.util.Queue;
import java.util.concurrent.TimeoutException;
public class Receive_old {
private static final String QUEUE_NAME = "june_simple_queue";
public static void main(String[] args) {
try {
Connection connection = ConnectionUtil.getConnection();
Channel channel = connection.createChannel();
QueueingConsumer consumer = new QueueingConsumer(channel);
channel.basicConsume(QUEUE_NAME, true, consumer);
while (true){
QueueingConsumer.Delivery delivery = null;
try {
delivery = consumer.nextDelivery();
} catch (InterruptedException e) {
e.printStackTrace();
}
String msgStr = new String(delivery.getBody());
System.out.println("recv emssage : " + msgStr);
}
} catch (IOException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
}
}
}
4、消息消费者类(现使用)
package com.june.rabbitmq.simple;
import com.june.rabbitmq.util.ConnectionUtil;
import com.rabbitmq.client.*;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
public class Receive_new {
private static final String QUEUE_NAME = "june_simple_queue";
public static void main(String[] args) {
try {
Connection connection = ConnectionUtil.getConnection();
Channel channel = connection.createChannel();
//队列声明
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
//定义消费者
DefaultConsumer consumer = new DefaultConsumer(channel){
//重写方法获取消息 消息体-body
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
String massage = new String(body,"utf-8");
System.out.println("recv msg : " + massage);
}
};
//监听队列 注册一个监听事件
channel.basicConsume(QUEUE_NAME, true, consumer);
} catch (IOException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
}
}
}