RabbitMQ安装以及消息模型使用攻略

//创建连接工厂

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值