一 引入依赖
```java
<!--引入amqp -->
<dependency>
<groupId>com.rabbitmq<groupId>
<artifactId>amqp-client<artifactId>
<version>5.7.2<version>
<dependency>
在Admin 下装创建虚拟主机,虚拟主机必须以/开通
创建用户 添加虚拟机权限,请看上一个
直连模式 基于maven
package com.gtmc.bff.dms.fin.batch.mq;
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 Provider {
public void test() throws IOException, TimeoutException {
// 创建连接mq 连接工厂
ConnectionFactory connectionFactory = new ConnectionFactory();
// 设置连接rabbit主机
connectionFactory.setHost("10.0.10.10");
// 设置端口号
connectionFactory.setPort(5672);
// 设置连接那个虚拟主机
connectionFactory.setVirtualHost("/ems");
// 设置访问用户名密码
connectionFactory.setUsername("123");
connectionFactory.setPassword("123");
// 获取连接对象
Connection connection = connectionFactory.newConnection();
// 获取连接通道
Channel channel = connection.createChannel();
// 通道,和队列的声明;消费者,和生产者,绑定队列配置要一样
// 参数1 : 队列名称, 如果队列不存在自动创建
// 参数2 : 用来定义队列特殊性,是否要持久化 (true持久化,关闭MQ会将队列存在磁盘中,反之,消失),
// 参数3: exclusie: 是否要独占队列 true 只允许,当前连接队列可用其他不可用
// 参数4:autoDelete 是否在消费完成后删除队列,true消费完成后没有
// 队列占用删除队列
// 参数5:arquments: 额外参数,附加参数
channel.queueDeclare("hello",false,false,false,null);
// 发布消息,通道可以发布给任意队列,改名就行
// 1 交换机名称
// 2 队列名
// 3 传递消息的额外设置(MessageProperties.PERSISTENT_TEXT_PLAIN)告诉消息队列,持久化消息,重启不消失,不设置,消失
// 4 具体内容
channel.basicPublish("","hello",null,"内容".getBytes());
// 关闭通道
channel.close();
// 关闭连接
connection .close();
}
}
工厂自己创建
消费者:
package com.gtmc.bff.dms.fin.batch.mq;
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 Consumer{
public void test() throws IOException, TimeoutException {
// 创建连接mq 连接工厂
ConnectionFactory connectionFactory = new ConnectionFactory();
// 设置连接rabbit主机
connectionFactory.setHost("10.0.10.10");
// 设置端口号
connectionFactory.setPort(5672);
// 设置连接那个虚拟主机
connectionFactory.setVirtualHost("/ems");
// 设置访问用户名密码
connectionFactory.setUsername("123");
connectionFactory.setPassword("123");
// 获取连接对象
Connection connection = connectionFactory.newConnection();
// 获取连接通道
Channel channel = connection.createChannel();
// 通道绑定对应消息队列 通道,必须跟消息队列对应上,通道才是知道是发给哪一个消息队列
// 参数1 : 队列名称, 如果队列不存在自动创建
// 参数2 : 用来定义队列特殊性,是否要持久化 (true持久化,关闭MQ会将队列存在磁盘中)
// 参数3: exclusie: 是否要独占队列 true 只允许,当前连接队列可用其他不可用
// 参数4:autoDelete 是否在消费完成后删除队列,true自动删除
// 参数5:arquments: 额外参数,附加参数
channel.queueDeclare("hello",false,false,false,null);
// 发布消息
// 1 消费队列名称
// 2 开始消息自动确认机制
// 3 消费时的回调接口,回调参数时Consumer,这是个接口,被defaultconsumer实现了,所以可以用他
// 通道给他才能拿到队列中返回的消息
channel.basicConsume("hello",true,new DefaultConsumer(channel){
// 覆盖,重写 DefaultConsumer 一个方法
// 1 标签2消息信封3属性 body:消息队列中取出的消息
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
System.out.println(new String(body));
}
});
//消费者可以一直开启
// 关闭通道
// channel.close();
// 关闭连接
// connection .close();
}
}
封装工厂: