当前位置: 首页 > news >正文

知知网站推荐徐州百度推广总代理

知知网站推荐,徐州百度推广总代理,网站制作工具推荐,霸州网站制作连接RabbitMQ 1.创建ConnectionFactory,给定参数ip地址,端口号,用户名和密码等 2.创建ConnectionFactory,使用uri方式实现,创建channel。 注意: Connection可以用来创建多个channel实例,但c…

连接RabbitMQ

1.创建ConnectionFactory,给定参数ip地址,端口号,用户名和密码等

2.创建ConnectionFactory,使用uri方式实现,创建channel。

注意:

Connection可以用来创建多个channel实例,但channel实例不能在线程间共享,应用程序为每个线程开辟一个channel。多线程间共享channel实例是非线程安全的。

Channel或connection有个isOpen方法可以用来检测其是否已处于开启状态,但不推荐使用有可能会产生竞争。

在调用createxx或newxx方法后,可以认为Connection和channel已经处于开启状态,而不会使用isopen检测,如果使用channel时已经处于关闭状态,那么程序会抛出一个ShutdownSignalException,只需捕获异常即可。

使用交换器和队列

交换器和队列是amqp中high-level层面的构建模块,需确保在使用他们的时候就已经存在,在使用前需要声明他们

声明

//创建一个持久化的,非自动删除的,绑定类型为direct的交换器
//创建一个非持久化,排他的,自动删除的队列
//使用路由键将队列和交换器绑定起来
channel.exchangeDeclare(exchangeName,"direct",true);
String queueName = channel.queueDeclare().getQueue();
channel.queueBind(queueName,exchangeName,routingKey);

何时创建

rabbitmq消息存储在队列中,交换器不真正耗费服务器的性能,队列会。实际业务中,需要对所创建的队列的流量、内存占用及网卡占用有一个清晰的认知,预估其平均值和峰值。

预先创建好资源可以确保交换器和队列之间正确绑定匹配。

发送消息

使用channel类的basicPublish方法

byte[] messageBodyBytes = “Hello,world”.getBytes();

channel.basicPublish(exchangeName,routingKey,null,messageBodyBytes);

mandatory参数可以控制发送

消费消息

消费模式分为推模式和拉模式

推模式Basic.Consume

一般通过实现Consumer接口或继承DefaultConsumer类实现。当调用与Consumer相关的api方法时,不同的订阅采用不同的消费者标签来区分彼此,在同一个channel中的消费者也需要通过唯一的消费者标签作区分。

拉模式Basic.Get

通过channel.basicGet方法可以单条获取消息,返回值GetRespone。

消费端的确认与拒绝

消息确认

消费者订阅队列时,指定autoAck参数

  • autoAck==false:rabbitmq会等待消费者显式恢复确认信号才从内存中移去消息。
    • 对于rabbitmq服务端而言,队列中消息分为两部分
      • 等待投递给消费者的消息
      • 已经投递给消费者但还没有收到消费者确认信号的消息
    • 如果rabbitmq一直没有收到消费者的确认信号,并且消费此消息的消费者已经断开连接,则rabbitmq会安排该消息重新进入队列,等待投递给下一个消费者,当然也有可能还是原来的那个消费者。
    • rabbitmq不会为未确认的消息设置过期时间,他判断此消息是否需要重新投递给消费者的唯一依据是消费该消息的消费者连接是否已经断开。rabbitmq允许消费者消费一条消息的时间可以很久很久
  • autoAck==true:rabbitmq会自动把发送的消息置为确认,然后从内存中删除,不管消费者是否真正地消费到这些消息

消息拒绝

  • Basic.Reject:消费者客户端可以调用与其对应的channel.basicReject
  • Basic.Nack:reject命令一次只能拒绝一条消息,如果想批量拒绝,使用Basic.Nack
  • Basic.Reover:具备可重入队列特性,用来请求rabbitmq重新发送还未被确认的消息。
    • true:未被确认的消息会被重新加入到队列中,这样对于同一条消息来说,可能会被分配给与之前不同的消费者,默认为true
    • false:同一条消息会被分配给与之前相同的消费者。

关闭连接

channel.close();

conn.close();

Connection和Channel生命周期

  • open():开启状态,代表当前对象可以使用

  • closing():正在关闭状态,当前对象被显示地通知调用关闭方法,这样产生了一个关闭请求让其内部对象进行相应的操作,并等待这些关闭操作完成

  • closed():已经关闭状态,当前对象已经接收到所有的内部对象已完成关闭动作的通知,并且也关闭了自身。

  • getCloseReason:获取对象关闭原因

  • 当触发shutdownListener时,可以获取到ShutdownSignalException,包含了关闭的原因,可以通过调用getCloseReason获取。

    • isHardError可以知道是Connection还是Channel的错误
    • getReason可以获取cause相关的信息

参考:《RabbitMQ实战指南》

http://www.wangmingla.cn/news/43491.html

相关文章:

  • 安徽房地产网站建设百度投诉中心人工电话号码
  • 政府网站怎么做有哪些网站可以免费推广
  • 上海网站建设案例2023年国家免费技能培训
  • 一个网站添加多个网址网络推广和竞价怎么做
  • 做网站多少钱 注意什么公众号开发网站公司
  • 国家电网交流建设分公司网站百度关键词搜索怎么弄
  • 网站的背景图怎么做的百度网页翻译
  • 网站设计与制作教程网页设计
  • sql如何建设网站数据库收录优美图片官网
  • 培训网站建设学校sem优化技巧
  • 在网上做贸易哪个网站好在线html5制作网站
  • 海口做网站上海公司baidu百度网盘
  • 外包公司能去吗重庆电子商务seo
  • 建设网站的内容百度seo排名360
  • 南京网站排名最厉害的搜索引擎
  • 阿里云网站空间做商城流程关键词优化和seo
  • 网站建设与维护服务器企业营销策划是做什么的
  • 多品牌网站建设怎么创建网页
  • php网站开发流程图网上营销方法
  • 那里可以免费做网站西安seo排名公司
  • 如何做财经网站淘宝推广引流方法有哪些
  • 广东汽车品牌网站建设免费外链代发
  • 网站反链数长春网站建设平台
  • 深圳福田疫情最新情况搜索引擎优化的意思
  • 上海专业的网站公十大电商代运营公司
  • 在设计赚钱的网站网站推广排名公司
  • 天津河东做网站哪家好每日英语新闻
  • 公司有域名 如何做网站免费可用的网站源码
  • 接单网站源码推广营销平台
  • wordpress 最新 调用西安百度seo排名