//创建连接工厂
ConnectionFactory factory = new ConnectionFactory();
//设置rabbitmq服务器IP地址
factory.setHost(“192.168.5.128”);
//设置rabbitmq服务器连接端口
factory.setPort(5672);
//设置rabbitmq服务器虚拟主机
factory.setVirtualHost(“yingxue”);
//设置rabbitmq服务器用户名
factory.setUsername(“whj”);
//设置rabbitmq服务器密码
factory.setPassword(“563135”);
//获取连接
Connection connection = factory.newConnection();
//获取通道
Channel channel = connection.createChannel();
/**设置队列参数
-
@param queue 队列名称 如果这个队列不存在,将会被创建
-
@param durable 持久性:用来定义队列是否要持久化 true:持久化 false:不持久化
-
@param exclusive 是否只能由创建者使用,其他连接不能使用。 true:独占队列 false:不独占队列
-
@param autoDelete 是否自动删除(没有连接自动删除) true:自动删除 false:不自动删除
-
@param arguments 队列的其他属性(构造参数)
*/
channel.queueDeclare(“HelloQueues”, true, false, true, null);
/**消费者消费消息
-
@param queue 队列名称
-
@param autoAck 是否自动应答。false表示consumer在成功消费过后必须要手动回复一下服务器,如果不回复,服务器就将认为此条消息消费失败,继续分发给其他consumer。
-
@param callback 回调方法类,一般为自己的Consumer类
*/
channel.basicConsume(“HelloQueues”, true, new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
java.lang.String message = new String(body);
System.out.println("消费者获取消息: " + message);
}
});
}
rabbitmq不支持更改现有名称的队列,如javaQueues,直接改为false是不可以的。也就是说rabbitmq不支持重新定义一个已存在的队列。
[](()(5)设置队列长度
HashMap<String, Object> map = new HashMap<>();
map.put(“x-max-length”,5); //设置队列最大长度
//可以通过为x-overflow队列声明参数提供字符串值来设置溢出行为 。
//可能的值为drop-head(默认)或 reject-publish
map.put(“x-overflow”,“reject-publish”);
/**设置队列参数
-
@param queue 队列名称 如果这个队列不存在,将会被创建
-
@param durable 持久性:用来定义队列是否要持久化 true:持久化 false:不持久化
-
@param exclusive 是否只能由创建者使用,其他连接不能使用。 true:独占队列 false:不独占队列
-
@param autoDelete 是否自动删除(没有连接自动删除) true:自动删除 false:不自动删除
-
@param arguments 队列的其他属性(构造参数)
*/
channel.queueDeclare(“javaQueues”,true,false,true,map);
- 案例
/**
-
@author 王恒杰
-
@date 2022/1/21 14:24
-
@Description:
*/
@RunWith(SpringRunner.class)
//指定测试类启动时入口类的位置 //等价于指定工厂的位置
@SpringBootTest(classes = RabbitMQApplication.class)
public class TestHello {
// 生产者
// 生产者
@Test
public void provider() throws IOException, TimeoutException {
//创建连接工厂
ConnectionFactory factory = new ConnectionFactory();
//设置rabbitmq服务器IP地址
factory.setHost(“192.168.5.128”);
//设置rabbitmq服务器连接端口
factory.setPort(5672);
//设置rabbitmq服务器虚拟主机
factory.setVirtualHost(“yingxue”);
//设置rabbitmq服务器用户名
factory.setUsername(“whj”);
//设置rabbitmq服务器密码
factory.setPassword(“563135”);
//获取连接
Connection connection = factory.newConnection();
System.out.println(connection);
//获取通道
Channel channel = connection.createChannel();
System.out.println(channel);
/**设置队列参数
-
@param queue 队列名称 如果这个队列不存在,将会被创建
-
@param durable 持久性:用来定义队列是否要持久化 true:持久化 false:不持久化
-
@param exclusive 是否只能由创建者使用,其他连接不能使用。 true:独占队列 false:不独占队列
-
@param autoDelete 是否自动删除(没有连接自动删除) true:自动删除 false:不自动删除
-
@param arguments 队列的其他属性(构造参数)
*/
HashMap<String, Object> map = new HashMap<>();
map.put(“x-max-length”,5); //设置队列最大长度
//可以通过为x-overflow队列声明参数提供字符串值来设置溢出行为 。
//可能的值为drop-head(默认)或 reject-publish
//map.put(“x-overflow”,“reject-publish”);
//4、设置队列
channel.queueDeclare(“helloQueues”,true,false,true,map);
/**发布消息
-
@param exchange 消息交换机名称,空字符串将使用直接交换器模式,发送到默认的Exchange=amq.direct。此状态下,RoutingKey默认和Queue名称相同
-
@param queueName 队列名称
-
@param BasicProperties 设置消息持久化:MessageProperties.PERSISTENT_TEXT_PLAIN是持久化;MessageProperties.TEXT_PLAIN是非持久化。
-
@param body 消息对象转换的byte[]
*/
for (int i = 1; i < 11; i++) {
String s = “hello”+i;
//5、发布 生产消息
channel.basicPublish(“”,“helloQueues”,MessageProperties.PERSISTENT_TEXT_PLAIN,s.getBytes());
}
//关闭连接
channel.close();
connection.close();
}
// 消费者
public static void main(String[] args) throws Exception {
//创建连接工厂
ConnectionFactory factory = new ConnectionFactory();
//设置rabbitmq服务器IP地址
factory.setHost(“192.168.5.128”);
//设置rabbitmq服务器连接端口
factory.setPort(5672);
//设置rabbitmq服务器虚拟主机
factory.setVirtualHost(“yingxue”);
//设置rabbitmq服务器用户名
factory.setUsername(“whj”);
//设置rabbitmq服务器密码
factory.setPassword(“563135”);
//获取连接
Connection connection = factory.newConnection();
//获取通道
Channel channel = connection.createChannel();
/**设置队列参数
-
@param queue 队列名称 如果这个队列不存在,将会被创建
-
@param durable 持久性:用来定义队列是否要持久化 true:持久化 false:不持久化
-
@param exclusive 是否只能由创建者使用,其他连接不能使用。 true:独占队列 false:不独占队列
-
@param autoDelete 是否自动删除(没有连接自动删除) tr