1.引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit-test</artifactId>
<scope>test</scope>
</dependency>
2.创建一个消费者
import com.rabbitmq.client.*;
public class Consumer {
public static final String QUEUE_NAME="hello";
//接受消息
public static void main(String[] args) throws Exception{
//创建连接工厂
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("192.168.202.132");
factory.setUsername("guest");
factory.setPassword("guest");
//创建连接
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
//声明 接收消息
DeliverCallback deliverCallback=(consumerTag,message)->{
System.out.println(new String(message.getBody()) );
};
//声明取消消息回调
CancelCallback cancelCallback=consumerTag->{
System.out.println("消费消息被中断");
};
//消费者消费消息
//1.消费那个队列
//2.消费成功是否自动应答3.消费未成功的回调4.消费者取消消费的回调
channel.basicConsume(QUEUE_NAME,true,deliverCallback,cancelCallback);
}
}
连接虚拟机ip addr查看虚拟机的host,建议把虚拟机ip地址设置为静态ip地址,不然有时候地址会被随机分配,导致rabbitmq的web管理工具连接不上。
4.创建一个生产者生产消息
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
public class Producer {
//队列名称
public static final String QUEUE_NAME="hello";
//发消息
public static void main(String[] args) throws Exception {
//创建连接
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("192.168.202.132");
//用户名 密码
factory.setUsername("guest");
factory.setPassword("guest");
//创建连接
Connection connection = factory.newConnection();
//获取信道
Channel channel = connection.createChannel();
//生成一个队列 1.队列名 2.是否持久化,3.是否消费者共享
//4.是否自动删除,最后一个消费者连接以后,
//5.其他参数
channel.queueDeclare(QUEUE_NAME,true,false,false,null);
//发消息
String message="hello world";
//1.发生到哪个交换机2.路由的key值是那个
//3.其他参数信息
channel.basicPublish("",QUEUE_NAME,null,message.getBytes());
System.out.println("消息发生完毕");
}
}
最终效果
生产一条消息
此时web管理界面,hello队列有一条未消费消息
启动消费者消费消息
此时发现消息被消费
好了,一个简单的rabbitmq消息生产与消费过程就完成了。