Java连接RabbitMq
1. 加依赖
2. 创建生产者producer 发消息
/**
* 创建生产者
*/
public class Producer {
public static void main(String[] args) throws Exception{
// 创建RabbitMq 连接的工厂类
ConnectionFactory connectionFactory = new ConnectionFactory();
// 指定ip地址
connectionFactory.setHost("192.168.216.14");
// 指定端口号
connectionFactory.setPort(5672);
// 指定连接的用户名
connectionFactory.setUsername("root");
// 指定连接的用户的密码
connectionFactory.setPassword("root");
// 指定要连接那个虚拟主机
connectionFactory.setVirtualHost("/test");
// 创建连接对象
Connection connection = connectionFactory.newConnection();
// 创建连接通道
Channel channel = connection.createChannel();
// 发消息 简单模式
// channel.basicPublish("","phone",null,"HelloWord".getBytes());
// 发布消息 fanout模式 发布订阅模式
// channel.basicPublish("fanout","",null,"这是一个邮件信息".getBytes());
// 发消息 routing模式 路由模式
// channel.basicPublish("routing","warning",null,"这是一个警告信息".getBytes());
// 发消息 topic模式 主题模式
// channel.basicPublish("topic","com",null,"主题模式的消息".getBytes());
// 发消息 headers模式 请求头模式
Hashtable<String, Object> hashtable = new Hashtable<String, Object>();
hashtable.put("name","zhangsan");
Builder properties = new Builder();
properties.headers(hashtable);
channel.basicPublish("headers","",properties.build(),"这是请求头模式的信息".getBytes());
// 关闭通道
channel.close();
// 连接关闭
connection.close();
}
}
3. 创建消费者Consumer 读取消息
/**
* 创建消费者
*/
public class Consumer1 {
public static void main(String[] args) throws Exception{
// 创建RabbitMq 连接的工厂类
ConnectionFactory connectionFactory = new ConnectionFactory();
// 指定ip地址
connectionFactory.setHost("192.168.216.14");
// 指定端口号
connectionFactory.setPort(5672);
// 指定连接的用户名
connectionFactory.setUsername("root");
// 指定连接的用户的密码
connectionFactory.setPassword("root");
// 指定要连接那个虚拟主机
connectionFactory.setVirtualHost("/test");
// 创建连接对象
Connection connection = connectionFactory.newConnection();
// 创建连接通道
Channel channel = connection.createChannel();
// 从通道中读消息
// 创建Consume对象
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);
System.out.println("consumer1接收到的消息:"+msg);
}
};
// 第二个参数是自动确认消息
channel.basicConsume("phone",true,consumer);
// 关闭通道
channel.close();
// 连接关闭
connection.close();
}
}
rabbitMq的消息确认机制
在接收消息进行业务处理时,程序有可能出异常,如果出现异常,消息已经被从消息队列中删除了,但业务处理又没有成功,所以类似与这个消息丢失了。
}
## rabbitMq的消息确认机制
在接收消息进行业务处理时,程序有可能出异常,如果出现异常,消息已经被从消息队列中删除了,但业务处理又没有成功,所以类似与这个消息丢失了。
![image.png](https://img-blog.csdnimg.cn/img_convert/012caf005d4920e67316fc3832e910ff.png)