使用IDEA快速开发
1、使用IDEA创建springboot项目
目前我们不需要引入任何组件,直接一路NEXT创建好项目即可;
2、打开POM.XML文件加载RabbitMQ依赖
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.0.0</version>
</dependency>
3、创建生产者
public class HelloWorldProcuder{
public static void main(String[] args) throws Exception {
//1 创建一个ConnectionFactory, 并进行配置
ConnectionFactory connectionFactory = new ConnectionFactory();
//服务器的IP地址
connectionFactory.setHost("192.168.1.28");
//端口
connectionFactory.setPort(5672);
//指定HOST
connectionFactory.setVirtualHost("/");
//登录名
connectionFactory.setUsername("toher");
//密码
connectionFactory.setPassword("toher888");
//2 通过连接工厂创建连接
Connection connection = connectionFactory.newConnection();
//3 通过connection创建一个Channel
Channel channel = connection.createChannel();
//4 通过Channel发送数据
for(int i=0; i < 5; i++){
String msg = "Hello RabbitMQ!";
/**
* 1 exchange
* 2 routingKey
* 3 传递AMQP.BasicProperties属性信息
* 4 消息
*/
channel.basicPublish("", "test001", null, msg.getBytes());
}
//5 记得要关闭相关的连接
channel.close();
connection.close();
}
}
4、创建消费者
public class HelloWorldConsumer{
public static void main(String[] args) throws Exception {
//1 创建一个ConnectionFactory, 并进行配置
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setHost("192.168.1.28");
connectionFactory.setPort(5672);
connectionFactory.setVirtualHost("/");
connectionFactory.setUsername("toher");
connectionFactory.setPassword("toher888");
//2 通过连接工厂创建连接
Connection connection = connectionFactory.newConnection();
//3 通过connection创建一个Channel
Channel channel = connection.createChannel();
//4 声明(创建)一个队列
String queueName = "test001";
channel.queueDeclare(queueName, true, false, false, null);
//5 创建消费者
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);
}
};
//6 订阅消息
channel.basicConsume(queueName, true, consumer);
}
}
最终的目录结构
5、运行测试
分别启动HelloWorldConsumer 和 HelloWorldProcuder 结果如下:
证明我们的Hello World之旅已经初步完成了!
我们需要了解的两个方法:
queueDeclare:
队列声明queueDeclare的参数:第一个参数表示队列名称、第二个参数为是否持久化(true表示是,队列将在服务器重启时生存)、第三个参数为是否是独占队列(创建者可以使用的私有队列,断开后自动删除)、第四个参数为当所有消费者客户端连接断开时是否自动删除队列、第五个参数为队列的其他参数
basicConsume:
关于basicConsume的第二个参数autoAck: 应答模式,true:自动应答,即消费者获取到消息,该消息就会从队列中删除掉,false:手动应答,当从队列中取出消息后,需要程序员手动调用方法应答,如果没有应答,该消息还会再放进队列中,就会出现该消息一直没有被消费掉的现象