看看吧!月薪20K以上的程序员才能全部掌握RabbitMq知识,你掌握了多少前程有光

消息队列的作用就是接收消息生产者的消息,然后将消息发送到消费者

1、信道channel

我的理解是生产者/消费者和rabbitmq交互的一个通道,负责交换机、队列管理;消息发布和消费管理;事务管理等

2、交换机

四种交换机:

direct:可以用一个或者多个key绑定到一个或者多个队列上

topic:支持路由的适配符#*

Fanout广播:将消息发送给所有的队列

Header头交换机:自定义通过头消息属性来定义路由的匹配

3、队列:保存消息的队列

4、消费者:消息的接收者

5、生产者:消息的发送者

0、环境和依赖

org.springframework.bootspring-boot-starter-amqp1、创建连接和信道

//获取连接ConnectionFactoryfactory=newConnectionFactory();factory.setHost("localhost");//mq主机地址factory.setPort(5672);//端口,默认时5672factory.setUsername("leyou");factory.setPassword("leyou");factory.setVirtualHost("/leyou");Connectionconnection=factory.newConnection();//获取信道Channelchannel=connection..createChannel();2、申明交换机/队列/绑定交换机和队列

//交换机名,交换机类型channel.exchangeDeclare(EXCHANGE,BuiltinExchangeType.DIRECT);/***第一个参数是queue:要创建的队列名*第二个参数是durable:是否持久化。如果为true,可以在RabbitMQ崩溃后恢复消息*第三个参数是exclusive:true表示一个队列只能被一个消费者占有并消费*第四个参数是autoDelete:true表示服务器不在使用这个队列是会自动删除它*第五个参数是arguments:包括死信队列,队列的ttl*/channel.queueDeclare(QUEUE_ONE,true,false,false,null);//绑定交换机和队列队列名,交换机名,routekeychannel.queueBind(QUEUE_ONE,EXCHANGE,GIRL);3、发布消息

//1、交换机名2、routekey3、mandatory强制(需要return回调时必须设置为true)4、发布消息参数5、消息channel.basicPublish(EXCHANGE,GIRL,true,null,"xxx降价了".getBytes());4、接收消息

//接收消息前也需要获取连接和channel,申明队列//接收消息Consumerconsumer=newDefaultConsumer(channel){@OverridepublicvoidhandleDelivery(StringconsumerTag,Envelopeenvelope,AMQP.BasicPropertiesproperties,byte[]body)throwsIOException{ //拿到消息 System.out.println(newString(body,"utf-8")); }};/***参数说明*1:队列名字*2:是否自动应答autoACk,为false时需要手动ack*3:消费者,当接收到消费者时会调用给对象中的handleDelivery方法*/channel.basicConsume(QUEUE_ONE,true,consumer);2.2、基本应用1、功能:有两个人小明和小华,小明对美女感兴趣,小华对股票和没事感兴趣,使用消息队列将他们感兴趣的消息发送给他们两个

(1)写一个类来提供创建连接和信道;(2)生产者(发送消息方)类发送消息(3)消费者(接收消息)类接收消息

对于固定消息体大小和线程数,如果消息持久化,生产者confirm(或者采用事务机制),消费者ack那么对性能有很大的影响.

消息持久化的优化没有太好方法,用更好的物理存储(SAS,SSD,RAID卡)总会带来改善。生产者confirm这一环节的优化则主要在于客户端程序的优化之上。归纳起来,客户端实现生产者confirm有三种编程方式:

channel.confirmSelect();for(inti=0;i

异步confirm模式的编程实现最复杂,Channel对象提供的ConfirmListener()回调方法只包含deliveryTag(当前Chanel发出的消息序号),我们需要自己为每一个Channel维护一个unconfirm的消息序号集合,每publish一条数据,集合中元素加1,每回调一次handleAck方法,unconfirm集合删掉相应的一条(multiple=false)或多条(multiple=true)记录。从程序运行效率上看,这个unconfirm集合最好采用有序集合SortedSet存储结构。实际上,SDK中的waitForConfirms()方法也是通过SortedSet维护消息序号的。关键代码:

//第二个参数就是指定是否手动ackfalse时为手动channel.basicConsume(QUEUE_ONE,false,consumer);手动ack有三种

单个确认ack

//接收消息Consumerconsumer=newDefaultConsumer(channel){@OverridepublicvoidhandleDelivery(StringconsumerTag,Envelopeenvelope,AMQP.BasicPropertiesproperties,byte[]body)throwsIOException{System.out.println(newString(body,"utf-8"));//手动应答ack可以在该方法中进行;参数:1.消息tag,2.是否批量ack channel.basicAck(envelope.getDeliveryTag(),false);//拒绝消息;参数:1.消息tag;2.消息是否重新入队,当只有一个消费者时,会引起重复消费channel.basicReject(envelope.getDeliveryTag(),false);//批量ack消息;参数:1.消息tag;2.是否批量ack消息,3.是否重回队列 channel.basicNack(envelope.getDeliveryTag(),true,false);}};//这里只需要条应答的语句,我这里知识都列出来channel.basicConsume(QUEUE_ONE,false,consumer);//注意上面第二个参数要为false才能手动ack2.5、消息TTL和队列TTL、死信队列、延迟队列这一块暂时不使用原始RabbitMqClientAPI实现,后面再研究,但是会使用下面的org.springframework.amqp来实现

Spring对RabbitMp进行了抽象,将交换机,队列,消息,绑定,连接等抽象出实体类,方便操作,还提供了RabbitAdmit和RabbitTemplate来方便交换机队列的管理以及消息的发送接收等

org.springframework.bootspring-boot-starter-amqp1、实例发送消息告诉消费者超时打折了快来购物

//1、创建连接时conn.setPublisherConfirmType(CachingConnectionFactory.ConfirmType.CORRELATED);//2、创建rabbitTemplate时rabbitTemplate.setConfirmCallback((correlationData,ack,cause)->{//ack为确认消息是否成功发送到mqif(ack){//成功发送log.info("消息发送成功");}});2、消息回调机制关键代码:

//1、创建连接时conn.setPublisherReturns(true);//2、创建rabbitTemplate时//改标志位设置位true时,当交换机根据自身类型和routeKey无法找到对应的队列时,//则mq会将消息返还给生产者//当为false时则mq会将消息直接删除rabbitTemplate.setMandatory(true);rabbitTemplate.setReturnCallback((Messagemessage,intreplyCode,StringreplyText,Stringexchange,StringroutingKey)->{//消息log.info("message:{},replyCode:{},replyText:{},exchange:{},routingKey:{}",message,replyCode,replyText,exchange,routingKey);});生产者:

@ComponentpublicclassRabbitReceive{@RabbitListener(bindings=@QueueBinding(exchange=@Exchange(value=EXCHANGE_NAME,type=ExchangeTypes.DIRECT),key=VERIFICATION_CODE_ROUTE_KEY,value=@Queue(value=VERIFICATION_CODE_QUEUE,autoDelete="false"),ignoreDeclarationExceptions="true"),concurrency="1",//指定监听该队列的消费者个数ackMode="MANUAL"//手动ack)publicvoidreceiveCode(Channelchannel,Messagemsg,@HeadersMapheaders)throwsIOException,InterruptedException{StringmsgId=(String)headers.get("spring_listener_return_correlation");longtag=msg.getMessageProperties().getDeliveryTag();channel.basicAck(tag,false);}}其中:发送方确认(生产者confirm)、消息回调上面代码都包含了;消费者ack则和原始方法是一样的

THE END
1.4.103.第103题配电所操作票要经自审复审审查批准三级审核1.91. 第91题配电所操作票要经自审、复审、审查批准三级审核。 A. 正确 B. 错误 点击查看答案 第2题 2.215. 第215题当前工种:配电线路工工种定义:从事配电线路及设备运行、维护、检修和应急抢修作业的人员。操作票至少应保存()。 A. 6个月 B. 1年 C. 2年 D. 1个月 点击查看答案 第3题 3.170.https://www.kuaiwenyun.com/jixujiaoyu/rciv5fm2.html
2.西宁快递公司菜鸟裹裹取件员工资待遇(招聘待遇,就业前景)西宁快递公司菜鸟裹裹取件员招聘工资收入一般多少钱一个月? 100%岗位拿¥8-10K/月,年薪¥10-12W。 按学历统计,工资¥。 按经验,1-3年工资¥9.0K。 就业前景怎么样?市场需求:2024年招聘职位1个,占西宁快递公司0.415%。 最新招聘岗位职责工资收入 西宁快递公司菜鸟裹裹取件员月薪 https://www.jobui.com/salary/xining-cainiaoguoguoqujianyuan/ind-kuaidi/
3.看懂工资条!今后收入每一分都清清楚楚看懂工资条!今后收入每一分都清清楚楚 男子称工作18天离职倒贴38元养老保险、医疗保险、失业保险、住房公积金,个人和单位分别承担多少?个税是怎么计算的?戳图,关于工资你应该知道这些↓(人民日报)https://zixun.kunming.cn/c/9159467.shtml
4.大家现在的薪资是每月多少?发点真实的吧,别月薪百万的工资条工资工作七年,去年月薪已经攀上了49000的高峰,今年还微微上调,破了49490的小关。听起来是不是挺让人羡慕?可他却说:“哎,除了涨薪那点乐子,生活也就那么回事儿。”社保交得手软,公积金顶格交,一个月贡献给国家和未来的家不少啊。 好在他是单身贵族,无房贷车贷缠身,日子过得悠哉游哉,偶尔出省溜达几天,游戏充点https://www.163.com/dy/article/JJEUPD530553RS1E.html
5.想问下,20k月薪到手能有多少?能有15k吗兄弟萌,公积金和五险一金都是自己的钱啊,到手1w5不少了,消费不升级得太多都蛮不错的了 点赞 回复 分享 发布于 2019-10-31 15:30 玉米加农炮 拼多多_基础平台研发 新税法下越到年底每个月会越来越少 点赞 回复 分享 发布于 2019-10-31 15:32 李方长zzz 楼主 中国科学院大学 Java 北京能拿https://www.nowcoder.com/discuss/331146
6.上海的网约车司机,一个月可以赚多少钱?在上海,网约车司机的月收入会受到多种因素的影响,包括工作时间、接单量、服务质量等。 上海网约车司机工资收入一般在每月10-20K之间,其中80%的月薪在10-20K,年薪在12-24W。 以下是一些可能影响网约车司机收入的因素: 1.工作时间:通常来说,工作时间越长,接单量越多,收入也会相应增加。 2.接单量:接单量是https://zq.zhaopin.com/answer/14372368/
7.ue4工程师多少钱一个月UE4工程师的薪资因职位、工作经验和所在地区而异,下面是有关UE4工程师薪资的更多详细信息 https://www.yutu.cn/question/tiwen_182065.html
8.中级注册安全工程师工资待遇怎么样月薪多少中级注安待遇是很好的,一线城市注安师一般月收入在1万元之上,二三线城市的注安师月收入在5000元之上,具体薪资情况也要结合当地的实际情况来看。 中级注册安全工程师师月收入多少钱 中级注安师月收入没有统一的标准,各城市、各企业标准都不同,从热门地区的平均薪资水平看,一线城市的工资高于二三线城市,在一线城市中级注https://www.zkjan.com/exam/detail-5397625.html
9.从月薪8.5K再到拿到字节跳动20K*13薪那天,我泪目了,没人知道我付出了你们项目做了多久,共写了多少用例?项目多少人? P2P你们也测试后台管理吗?个人芝麻信用积分是调取哪里的资料? 如果要测试后台删除用户,就是用户名后面- -个删除按钮的情况,能写出哪些测试用例 6.如果京东有一一- 个购物网页给你 ,你要怎么进行测试?测试哪些主要功能? https://blog.csdn.net/m0_53918927/article/details/126485071
10.百度员工月薪32K,有人给20K想挖他走,网友:发流水羞辱他就有一位百度员工表示今天有HR挖他去小公司当CTO,自己可是五年的工作经验了,月薪是32K,然而过去当CTO月薪才是20K。 图片发自简书App 图片发自简书App 看到这个情况相信不少人都会觉得这HR是不靠谱的,可能这位HR就是一名猎头,这业务能力实在太差了,也不看看挖的员工是什么级别,拿多少工资就随便乱来的,这可就是闹https://www.jianshu.com/p/a6be1c91f550
11.谈谈你从月薪2k到月薪20k用了多久?小组讨论自己带团队,团队十人,目前月薪20k。从月薪2k到月薪20k我用了整整五年;另外:16年初的我还是租着房的穷屌丝,而现在车有了、房买了、工资在朋友圈中也算比较高 其实有时候机会命运很简单,就看你敢不敢!所有的一切都只能靠自己,不要奢望别人! Ps:在南京那家互联网公司工作的时候加了三个月的班,现在的公司https://m.douban.com/group/topic/95008445/
12.招聘信息上写着2万3万月薪,面试时薪资报多少合适?最新资讯因为公司默认每个申请人报告的预期工资都是水,例如,申请人的理想价格显然是2万,但预期工资将是2.2.3万,甚至夸大到2.5万,申请人报告多少,HR会被用人部门和老板质疑。(别问我怎么知道) 因此,当我们报告预期工资时,我们必须留出来HR讨价还价空间。换句话说,招聘信息上写着月薪20K-30K,你预期工资的下限必须高于20K即http://www.zzhr.net.cn/news/10421.html
13.腾讯9级阿里P8一年赚多少钱?互联网大厂职级薪资揭秘1、腾讯9级、阿里P8年赚多少钱?互联网大厂职级、薪资揭秘最近,很多小伙伴聊到腾讯、字节跳动等大厂的职级、薪资相关问题,有的小伙伴表示,因为职级的变化,他的薪资从20K涨到35K。腾讯、阿里、字节跳动等大厂的职级、薪资,是互联网从业者们的标杆。弄清楚大厂们的职级、薪资以及相应要求,我们的努力将会更有方向。那https://www.renrendoc.com/paper/216599921.html
14.还有应届兄弟不关注五险一金?来看看五险一金的缴纳和使用,八险月薪25k可能不是全都用来交五险一金的,有的可能会扣除2000块的xx补贴,有的还会扣掉5000块的绩效之类的,可能给你用来缴纳五险一金的只剩下23k、20k甚至更低,问清楚 HR 缴纳基数,包括各地也有基数上限,比如月薪虽然30k,但是当地最高可能只能按27k交。 https://cloud.tencent.com/developer/article/2211468
15.国内3d动画师月薪工资多少,高吗?无论是3d技术还是影视行业,都是比较有前景的两个行业,所以3d动画师的受欢迎程度自然可想而知。最近就有很多小伙伴向我打听关于3d动画师岗位的详情,其中打听最多的就是关于3d动画师的薪资了,所以下面小编就来为大家解答一下国内3d动画师月薪工资多少? https://wap.hxsd.com/content/7428/