From 25c582093d02c6e77d8a86c38e6288da50b9904a Mon Sep 17 00:00:00 2001 From: bunny <1319900154@qq.com> Date: Mon, 19 May 2025 17:34:52 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E4=BC=98=E5=85=88=E7=BA=A7?= =?UTF-8?q?=E9=98=9F=E5=88=97=E5=AE=8C=E6=88=90;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mq-demo/ReadMe.md | 82 ++++++++++++++++++ mq-demo/images/image-20250519171927379.png | Bin 0 -> 14425 bytes mq-demo/images/image-20250519172029093.png | Bin 0 -> 19564 bytes mq-demo/images/image-20250519172210296.png | Bin 0 -> 13385 bytes .../mq/listener/MessageListenerOrder.java | 6 ++ .../mq/mqdemo/MqDemoApplicationTests.java | 17 ++++ 6 files changed, 105 insertions(+) create mode 100644 mq-demo/images/image-20250519171927379.png create mode 100644 mq-demo/images/image-20250519172029093.png create mode 100644 mq-demo/images/image-20250519172210296.png diff --git a/mq-demo/ReadMe.md b/mq-demo/ReadMe.md index fa85bfc..b53ff4c 100644 --- a/mq-demo/ReadMe.md +++ b/mq-demo/ReadMe.md @@ -848,4 +848,86 @@ sequenceDiagram Map args = new HashMap<>(); args.put("x-queue-mode", "lazy"); channel.queueDeclare("myLazyQueue", true, false, false, args); +``` + +## 优先级队列 + +**优先级范围** + +- 通过 `x-max-priority` 参数定义队列支持的最大优先级(默认0=无优先级) +- 有效值:`1-255`(建议不超过10,因[官方文档](https://www.rabbitmq.com/priority.html)指出高值会显著影响性能) + +**消息排序规则** + +- 高优先级消息**优先被消费**(同优先级则遵循FIFO) +- 仅当队列堆积时生效(空队列时无意义) + +### 测试环境 + +**创建交换机** + +exchange.test.priority + +![image-20250519171927379](./images/image-20250519171927379.png) + +**创建队列** + +队列名称:queue.test.priority + +| 参数 | 值 | 说明 | +| :--------------- | :--- | :------------------------------ | +| `x-max-priority` | 10 | 必须手动添加(UI/代码均可设置) | + +![image-20250519172029093](./images/image-20250519172029093.png) + +**绑定路由** + +routing.key.test.priority + +![image-20250519172210296](./images/image-20250519172210296.png) + +### 测试Code + +```mermaid +graph LR +A[生产者设置priority] --> B{消息入队} +B -->|高优先级| C[插入队列头部附近] +B -->|低优先级| D[插入队列尾部附近] +``` + +> [!IMPORTANT] +> +> 设置优先级,不能超过设置的优先级,例如设置最高优先级 x-max-priority: 10 +> +> 最高不能超过10 + +**生产者** + +```java +/* 测试消息优先级 */ +@Test +void priorityTest() { + for (int i = 0; i <= 10; i++) { + int finalI = i; + rabbitTemplate.convertAndSend("exchange.test.priority", + "routing.key.test.priority", + "优先级消息-" + i, + message -> { + // 设置优先级,不能超过设置的优先级,例如设置最高优先级 x-max-priority: 10 + // 最高不能超过10 + message.getMessageProperties().setPriority(finalI); + return message; + }); + } +} +``` + +**消费者** + +```java +/* 测试优先级队列 */ +@RabbitListener(queues = "queue.test.priority") +public void processMessagePriority(String dataString, Channel channel, Message message) throws IOException, InterruptedException { + log.info("<<优先级队列>>----{}", dataString); +} ``` \ No newline at end of file diff --git a/mq-demo/images/image-20250519171927379.png b/mq-demo/images/image-20250519171927379.png new file mode 100644 index 0000000000000000000000000000000000000000..b0c2e08bc22d0ee7a22aa129da5406c2e192a06c GIT binary patch literal 14425 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 literal 0 HcmV?d00001 diff --git a/mq-demo/images/image-20250519172029093.png b/mq-demo/images/image-20250519172029093.png new file mode 100644 index 0000000000000000000000000000000000000000..97ed0a9069c81075a8e79dace23f3c1a69dff1c3 GIT binary patch literal 19564 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 k>q(^g+pYi$wu)uZznq{TJ&#$3Jro-ZF2NJ*Z zC~RR8;77zx2V3lAX`^lgA!-rxChAQ#A9Dvp~?= zTI~uFWiZ^H-wsNgW-gfqQw|w4wzy{{hJ;AAxNK^BB{bx>40bKUH716*%e+L_n8fC) zB*~y|m;oI3o6z`)a4+6!uZ25n)J}I?q9!YS@I)GC@Ml7kmh+Aa%)kNhi@^2y?U-2V z!tc_qR;Oin>tm1KQ-%#su^XG7)W1hS@1%-W2EiNgnRMOqOJ$yVoTIc-1rO`zI zV){nlD$p_gn4}uG28lfdi~fPSsEGOJpLXMcl_pWyywj-$dO;~xw=?*qI>4(CS}`YU z2}o63*gy~mUWC0*x(>+k-`MzXv+zLlaDH=lItD<~SsHE6 zIb!!o6JoJEttvl4$;%@$MM`ejHMsVhk*uQu1d_QBo_@oD1tai`N4&IVwcJeHgFFwK z2DF*Q$%@9C#zwQPHl7v{?fnVyqHPXVQ-543 z@9}+Y&%t9!9~OVs2HC;JKrGF+CLUO!#l?KKB%=d{q1$QZP!v8(V^I`dFtk@{qC&n9 zmwwAq!w){HP)jPxFg&9#1ltvb4{L#$(I`Ao6|L*JR_Ad-As2^B5|C(7^1WA`$a4J4 z)Xr{SEw#3O<)&R7v{^}BESIh}B+ogVbiTP@&>HD8t?8CbO!U%Wb0Lm={0syF zHp#LBE!UqLYwU-LlQ9Ic!6h*62;m{-uE*U+Tz0mBhcvJFK*kUvIO~&Ma9Q#5Pjjzv%CVdGtt7Ev$!CG0V0JCl5zJv@XD; zqz(!#cF5J2lK5zHeQGvdFc%8pC*A>Oy8WUKs1IQ`HB3(8h-L#-!$h_O`EbI~qB*_? z0SB~4vj7_rSqhf=tI_z{LEM&EJs>UiG5~#v`Q&KNPzYuT{H@uAiTF6Oey~UZy_wCO zDukt48eUHo3MXpI6qTMOGq|=Bk(%RA_Q9~Fzne}h^X5lzvW^O$E-k)%&ov`G^CaWr zX$DS@KupA1co`yVGEyhCL(3s^~pTTxK?H)jxWdBfwD);l8Js{6U%V!}gQ2 zQQeNLU+sJz4&L^mnUS#jV?1np!wko53_H&AOXn1k^@RCXN|{?cWSk%9#3X;S7R;$Y zwO-hK<%N{-h0`Za{9Ik=O;5d7YL?3>dz;0Rv?NNi0^GCP*VJH1NM6^{)-ReaJDqZ! zi_eK)=56Jzhozl)%2?UZX$k|?9ms@CvMqDvPXDMmui9|whesA}yIbXM!B&C{E@g76VpcgE2sj1(9!PFF z{g}lubJ!H!Q&+vzig)3+%(F*8Ib)ss&;$s*=V0e$tegTm3s=~0r{z*P8RW7&W-IeA zrM;}>>8v$Gv~vx3GY!SPs?J&qTvNX$>@8Sb4)!Auog4^eh*DLIrzb4UpO^EnFB4@% zknL8mr5je)Pu9ZSg9-pW4{ibFrPX$rT{uBbPTa7CO_K9ib>U@yiG5tEdGg?G1w6Iv z!fc$?veS*cokoPv+>Dq*EXNOO=AF^G;lGs+d3XA@IVu@wf1{!V#1OzC8E0DB`%<_s zlJLV)8>7-oR;7z%c2n#%2OahGb{S_z;X>m_OZG0#>wM|qVL?by)uW4fyqe!+P|?QU zoIgWDJExTSn(^Mh%fS9fbrDmc$%t#hnPZdG%AkrnVQ+Z;^Uk!M^#_F(46$q^#RVwI zWu7<9y#`7}^!)P~OF;i}?*%8}({MU-IA_gthha3?+tB{z^r<@t2&I&PZjCGpQa%;V zTxc+8{=p6>_r1kNQ6ThnsN&9yW5>q7iLq7_K@-TMZEuxL z>=GKmLXDgG88ILHW{7zz^=mJV+_QG%pLWw0)cEFH>#TGt-vAL$dnLn4+I*Wmk_)wl zhQmzZXo-eFj&MJD(1#jCQrfJaEvw7TD6EDD-s{qMWhG*nqii0`2sbqVh-UJ;a!&wF zEIii;&?AjEArJ^A{?6!!AS+cwx&3CIsS238dF4=mHb{HRkgd!Q9`*L>smMHb08BKZbu^8%!3Quo939U}Sc~sLxi1+K zJe6hS23cu&xs9o5fg{hn?Sl7<_ti)@W2pDr2o}Am5*lDYs08_@QI6fh?Bg%IDS$D3 z?dt?8$Lmh6w=)u(5J82jzg~iemU?zsXr-zHS|bsA!-b%qy>Bb;EA_wQA{)Dv3;fqfRzG>}o`8`C`hO3J07OQe zE_T3_%?{wA1gi^KHUOc3^DRIepPw+B&?mEPpx|TwCLT2S>}fRW z$k`T-A{U}ErS#+{Fxfg3o`h|NA8T|+%n^qRl(RN}U;OluKDi_=OK8#n;U;OD<}~OQ zFpvP%BXp_1veB~A<4J^EA}e7^<&5Z1Ixmu`2Cx5TmZ;DOyki9=k9`tj!)xi#{mi2nJ}=Ji*p* z68#YUhc$LQeFX@$*!oL{Nls>-ElPlBGb=mb@B`!#n)il>63EWwk~Tq|6QowAPn z6B8;E(GPe`y35o%#2N>Ss>`rM>1n`Mw9M6gTB4($in=5eu%}5JI|6n2Z~E>46JH!6 zsw+f^n?JaM7ys%+>eewU>R)^u=w$cg?(+#l4 zvgD=I@DKoYZY*alSHJr9*G{Q*?A9$nDbN2EwKpQFZvSBhzA#(c=O9c%Kn8iD2!NbI z!b*?|0^$3`o1 zJnRCBye@p7Q(pi*OC(_0?){c{+Sc8aT)3AaG$pUnzL2~g{bgS0@wu89xrOfG2drf_ zX^WRWihgG}GxJ@u6!Z2=0n`8o<{nLfRx9j-7g?6`zYd)0UVuVn!?k?pm~x7?Z_=}W za3T7jrr)=6UZbo**Q-|w#)@hh`QD*ZoDYN%|#wH!f=WR zTQ9GCf4#vta$PYg9(Hij@o_%aIeLud@m{;0L2f-$)LW7kKxo}LV=5j~hwoOHi#jG4 zNj(ifI@%w0ti)SxJPgOkxQ9Mnjq8$6W$giE`LbL1I^|YB(B}}zoK(A+`BCRB%lXX>D>iXH((3wfK0eY|J^uj3u2Md(B39o&Mp7yokrSgr*!i2W_{w>0vekPvezBfOQe zC?SsL;FO!%jlHq5hrOw>R*yfqR1!bm_#y?)QrlEtDi>+H`iCTI7ohVsvEH)TuvGen z76r74HTaybc22NC@wk$w>wA;T?!^hy(|2r)Rgfs^^_;@*M_3%B|3E^3rAyEd=hT}! z!o1t1P#EGy%ay^WR#6M`@=}S#uw>X(SUzrzBF5oH%Q8>bNgy|q5 z_@-bY@8;c>$?d+&l##iHoS<}icXFPjlv4W1I=EQ=lEXTR;*i4WkSL>E;S)Vk+tlD; z*44F}c>mjYZvXQQiQ6fOUoI{@0xO0|JR;2N-k~8!xUv_*4v+j6vlwq~srIoINEq*N zGmxb0O3X7ti2BwFbc&qs{0GJ+HV-B2pAsKr5~JBD~0FCyc;{f5?G zPQe$+*FBs2UZ9ywiDyO>0*M$?8Xv@&zc+=pUaAx(Tn*(nwi4ZeB;R<$1zzE0FT-(=)Syy$Pt)Qgt?|-#7wJSB?^QZ zznW_Aw+&liBMHk|5GTK0K^6}!{S@P)*uwwhr&N;D&*U&yT>g+>M8);}e*~C~W zXVjkvF!fMuf^hV){=%27$KmwB#|Fma}` zMm3&5`;>?djX@_vjp6|R%XvPScd4=nA&R!rc#_5_@q~x><4$LJ4^Ii28H^@1<%jrC zt2t?mGC9w|ll4R7Eu%xOuqAdur1oi}-9D&Q1iLXh^JHN!lu5%}XSc`g#ks^iBh6!k z)BNj0Cys*mQ(|9OxojSUPcdb<*5Qef%|-&U#P;glQQHqJyAU*$5aq)W+H$W`;>UFJ z=*P=qC$HKV$~!&MqGb~^W0QkFrJfQ@bFbyjc_k>&)b@F}hxmHNav-|5>aL_~ZrV_C zSqDBS*kk!DIJD&O>Zp}6or<(Ij4ib_wxU83Q${UkXAd2%_OKFFjzUKQ&T{-dii(mq zJ8||(8cj{T1hWwlEs8uIaKrw zOV5TbwYDZ%0^>nAyp5S0A4xIuOro0woy-s&dNjFMQqZ`HS=WDUmw2J7#gQDwNOc4CDZCt?##RF6$`1?E2QeII8*zM{VxT3_?$!HDK= zD6@ql3M0w>jSOlmIcZC@l38?!=m{~_o!IF~+KWiDd>^%}X}^cKDd~7m206wR-Z{7+ zQlj@UUR!akO&Is<4&_eRTpvjFb$;?Z$gO$Mb8F2|=I>QEX;ANDcjh1`Q)hoBkKhcH zlYcdTg=v6mwt`1WY9@sLmiECJ`|x4$o+?boo32z8V%~1GNaZ=i>kVTPi?R2tVkcX# zOs30?ei=SNt2Qfc5JO%ns<`*NNd4=T%~G98kNhi&5r}8JbL@Pz z&*V6e0lI(EkC)MUt1K(wJw2UJ(YBv4C#A52TQA{e8l}a~6CS+H)byqsldaUrHc3xb zCLwNVZD`Wa>{wj>mSWnf8);#~B`H>vkqliR*CiQr32~mzNoMDVrkwmk`wkT)42Hd2@&(L=)tYy)1!^1xs-i#MYALB-DBa#i zYY2GD$yb~1L``{4m=|VWtGC94T&a_qxfxN`iIyTuP%M$Ery|oc<|BxszvF#vhLYk~ ze@I8{OmT^^vY>eTerDvEZ?m2x1Mv!u_w*(6>TR!>l+D?B%a1tXmhry34J0p89=f}) zQulNCeAj9#V*$-!QE@fR+T)$OQ~>`S=*_Qf&Pt_Q-^EfT4ck18p!ZM@6+MY6#`!*# zDgVpf<0r=ZBImcw+ZE_y+36cAMsmR@1Zrg9RwH5=2wK~8|8V1-_wUWZL=~rQH zMrdj1M19P*fTH(UVAwyG!>4?z#%!^1Q{>=H+ zAqp%-v(wPK%w=3<*XTa!MkZ;9OG};IsvLsZP3lQmRsh!wtj5nMlXXAzD(y>#dZ}_& z#dMX2kZo{8mtaX&;L%xVo>w2dgVCv=PNYl)z_HD%+yES9e`#P06Wdw{4_%dh`dQtQKm%MR zHuSEtjf8dfSDOpNm;Xeyb#EUvk#QGssCaK(HjgKnTn>H8s7omcB{q+V#4x0{3k=yS zh7N69hGv0`!h0+4c6TO`cALQ@Uc66c*?xKDnU>2ZKl_NHzNGKNEa#SHUN;~B{b-V2 z3STMbrh&v6bwjbfeQ=TaK?-6B_(s0?Qj4bAjZkG9EN#{twzoKwp>;n~oZ)r(OF{;_ z*y!9={pmMpo#&2Bhia!RktU5+=2JYCu7N`p= z^_W;_U>;NcGFwn0HaSD_lv2kTwMOpsnJejwsj@b{!TOLzhL3b2AGt1bj(l!Z7}vvQ zaa<^sv}vt_0^HV=JGdfeZdTr4pfTJ62K=9}U2SPC-K+y+yv@HVy;vqfEy7W!ZSAo^ zdq;Q|j(I;JV5G9C=fOA^t_T{8u0E`0I`;&Lv+rTr3m&+fBQSi^G!gqTc`Nu|qar`y|71VZ3z2FE`DKYQH)0w>61%umv_`Q!iPMw~n2`ZbUGm zP;?-d|PZIzDC1170hyYFXfpMGm4&5rpRSVNGB4zO@D`3 zdW2&%MyDly>o+0IYAHClJ6w&Gxm-|koTo0&d;P_M)XtYzZi6!o&5MUSdc%i{x>6?4 zei=u|u07efG0EYJgCfA3vZ#@3(1o}M_SU$(vIg0sSXLG7=jSD)?g3D_FOg3jc1$cP z5gs3svx6HNV!EXq5KcvK%f28gZ+VIT{zhxhu=bPHTbh%h~%AAsI@dhRYGFaz1sJOc6}VZJuj$ zyGS>?y(-6$8c#3d_=#4yc<_CTi$-W?I@>9G(^vUJ($>lCz17gPIUzajbK|xNJc~Ji z*Exp>-_evq3lq(iBgg(Q`J<1##d}T$Zks?F-!1^x#Cu}qE-)YrFqw&j1QULn2$;l> zs^$FT z4R7=ep{+bnhW!PlY#24%x{9EgF|fsbPbMDJZ%?~$xnvB@R=;0dZpEU^n&!c7DfXa; zC=Se^qXpVfSkk1l&Fh)`kjx!%8O)M4EMyID38u>WQ?u&%y;(y)90D17;MX>av23CL zPO{fdgNUZ1Bn6oWi}PZmJ=RPYME@57qKSy1Q$v%fPc<@O0|>oL4UL3a!i_{`ZcGKj z%*Q-pZHf+Ue+j_0l+XA6U1LPrQ?4deVZZv8neuJyn8++gs8G+mp2%y4-kc2-iHY=K z*FPq9kL#hKW509#nQUOuS(aQzZd`FidL7>>#AhoxLT+X0GOG3_=c3{)Jz@e$^qbtJ z4g|&R4rU2T8=XnQpUaFVYxs)~Dv0Ulx{(1eq4pG=Yqunl+oA`2H>_~+Ay4@b)dyV;YjF)%dysHsQCz3Z9RABPSKD@|A- zhnv}d7p;`k76i;d)@(EYIUIKD!?+nU|ib7A`MqMR%-4*b0 z6PARDL8f^|a=dq{wqB=TtI@!HzOip5) zupT)0#l+!^wXH$#nH%TcSN5u$Y0vEIxhyY?M%=Kfna}LfFue`2J)hGjC$*uli0}o& z3{Q59JjwUf*EV%rMO_d5r6g_CoAH$|uzF#G$tJ|E~9|We3&J961?VRyS{&E91PZ3`Z!1hR+(jr2Hg^S^=2>f0qGiXMrQM4f z=Wpz_@3qkuyjnk>8i8m>c=wjLFCQH#cs*<{J7p> zt^u!)OO?}MuPJ-R(ABN5*|Nx{)+s<9 z4QuPrY06LPE?+6XlyQa8eBEkT%K;X7sx%`cM=t-vpmfli{N(dPF`?X%OJ0tsn<)bg zK>wBTNf2c>CFCfju2*m@s%0U+Odd_Z@$eWt0!A4(W@ZPG&0|Au#S7?3`b^q0N|3l)91UpCruvK+?rN;#D z7lbb)m?y!raIRP5P(k8h>)zyv*nh$5>9x$^-DaHuTOl(Dv;YSbsZwujxPl%fR33$S zZ;3|}2i+e;nCDbn0ICqqSJfxOty02=pZLXw^M1(AM>oeYW%khn$AChp@8R2!?FY-Z z&M>QA&+0xN(Ev(5iA{|Vy-tRl{R=?s$~_!5_E@`aJJ^4EdG3TVd7mER^jL9w?twi> zMkL89tIWV>Ja8aYoQ;UOm+9pRWik?V(&^SK2z@Paf7nI`UA$Q9bI66_^5;&F)Yk&u z`k^mfd^hf>&*wF1%N#|dc zaHB!h`pTRa2&*fWKc*7A z>zK!aUn*=2o0ZY7SDUFn=YL*ef^^fqvCZRM)T-u=x4#wZ&s5hOS zA2pzhISK!RjgI6ru-?rjG9cs89h-r-1=*BKELAH%Dd880%` zs+R^O(&yLk>^UgLvg{HxOTiYIno1#<4@R^0Yaq`qMxjzQV9+Mdrjhwc3gJnTizvniohwCN$Ha_STmto?c0 z(8C2hP!b3 z;el3S)^Vs|qJZj?+D)p3-A*CyVX1nfMq~l#^#~2CcI&`d5nm^Pmhl8Vvr2jL;d)iq ziE@7NlRWnfim93Vj%@Ex*H(1|Xqr+IqCV}lIw{T6pPzN*GFuuK$JyS6PEmos6TnI| zeDX0AZ;YSta<|H`kJc(bu3*rpa`U?Kc?5JTF=^)XzzO)Tkl| z0P>LEjQP)`k4U<}lso^(eo;kZmKZxaTC9jp6i;C)V+@npK=J@TEc4fTTm0e)ju*u{ zH@tIuzdX^|hr&Jb*7&aQJ)j^FyO`*sgAtU!2Rws5VTY`c6+n6mr{L|5g-vbPT8hFs znvtzMEf2qCP0tfzFY?Em%!w#8W6J}wJj~KX5d+|?xJ&~H3Qux)h={0COPu{wD^WW2 zKH5uxMm4d*WIaJ?@$#^ft{9;F!~SGtxmy{10p;MCJ+DB7t#P1Z9nz#5_)Oyo@GZ=_cb z3|tt6w3$d%Tlx7uG0R^53t(>~RKRI&;8csH*C5Zfn>OKO|2@ir!h^|eSJZOaRaD}w z_e9NMWSl?JBd+i{8(!F{U>femLmg#XKCr#<4Nyv~2*^;TmDYV3w6bpuK7s$K;{Ooh zoR1Fzp`HlKMouTOeK~omDOzF`{Fk%fdXi6vdH93>qulsUO1k{hCGB^c18lUx`S%3* z|GA4hK7S4+cp2-l;(9Osiw%&m*r^a6vt5ArgZW3M02p%fS?#RG_b1swJmnA5k6h)u zM~(X@S;F&Jlc03^SXuzo2dZHuJPqaY{#{rcb4Vh`D0bPnn!;H~DQwRKc#yYxxLd|2!oc$??C5CTArc zD56egE}Pya;bNvf7y(7Fr#PKev4E>dK`PN!;J(rkyTQlF-nGTIn;24JEr;n9X)Y-E zUkg5KyWdE?8ScbIh|e*EbWmi_qU3{X@EmEo46}eD&4M@t5C_e89RIRpe{{8*o@aEG zy3&|JJRc@FDFI>Jf%!%~@%};dhL_^X{d$!+qYN?uNMnlq_*Pu?Hi4l9?ism&;9F## zW%QQ^Y{bfo^j;HQbYl(;m%c_j{-*$vE(*l*9O;x3_X|#{zhu-RJTT-+I@k$@q20<` zZC)*@lL!RkALOaYw_cV9JIty(oW?u$f6&@68(AF&JF91kfoiO!Co*)mm`lay6prVy z9zJ7C&luQI{2q8BY)=Ir)29le9TT-4JbvtiKe^F^Vetg18JQZ~g%O32zL1yntj=L=h9?KsC|rBsNC1 znHf_~5hK4um~c9BO>Ys;60K4t`-W*)GB`9u{nD^;M|wx~i+ZbQeFbn-A34}P+bZ8J zDn2CP-fv;>rCBG3Yf6tKEjSW5O$3w>(nAu;$4V$!4Cf}rAu&Fh44Z05oDoJmbH@ol zVgiKs8*vT7I&r65G@oy!XBU|cpV!=Y5@KinpDl=%$#m^{edBAU=j_SvH$MMw%y$00 zJ190L0ozJnU2U4es_s}R%-i&(d*3SaxpmtYusVd92SR2tKU%Ze11oHoQ>&rFSHN=| zpl$zSTjz&g|KT^kpGP-C)e9(nf}cw+cWF)k-1jmCKGuH)`vnyDT|G6~>_gg1U_1O> z!3|xF{Y52Sz;S5fS0ZjFE9OVlfhL*u*Co4E02ju5w1}MMeV5(C3^Gpp*XKvwO6yI% zHZ?yCj$6*J{dSZ09dKjo6n%IrwP`L>C2-Bm30BlmRk%DbN(dd)K%x@cY42LC%irDE zQ)w*L{rBhj`g?cua(5h;t3H!rwD;Gm)%yGY6s`OXGW2QdS z`zkKpooo^M<7aEP_&uSny}*4-3=NM?*_*v8jNeo7@z8m}=RlDIW>d;@uEc&mvsho= zHZHRN0ca?D+x#v6O=r86pS|2atxxyj(PO{|B)08JK zEulQ^@-P4U8r)J*bzg2Lzq@E-4%|P?P`1S8vzx8y`I?<3Zpq&9cIW;AU>?>}4f zd-n6&_ioKke3tk9=(E^0-qYW`{WWp7_5QcOuxgOi+J9rk?q@UIy^~!`wtac=@%ikj z4U3mQldLlN-rcf)x#%lx`TyVkz1_%j_U-!TK<2%*KAV@!v{bb4PI`0c_~%R8&tFlQ z+76lrP&u9Mllwoq*WZ4YH1H&)i%Z?@v(~*-Oaivd>ON~+6}tbYeMVN%A07Gh*{@e z)mIKJ{F}eCUQgiS;{1I}-`Di7eY*Dll65sDFE2jU-;!x>a^bPxzmwqgb}5$6d%s=( z++VN#*S^iA$8L?;vwyi~kIKjH`Juc>Up{kj_#=I%ui|m_e;*ya{_?hae4Y1w&%BU5 z2BGy2JB&^*&d;2FY18krv#!$?RF(X{x847JP+DF0yXDtL-VHxTo}CXs2k!3j4X#v;Oq`a7&XUu3rgF5i})#`n7c!E>qembgwU=V zCsK^2E>d5*aj}^gP-K&rpfo6-FMZ*e`DR5ga2;dAnxG?Yz-+%sVafmQ-?=UVEz{%c zc0!JMF`D$KeB(^i^5RQe?ixgS0XolvLBa7B_>`Ii_Ct_`g}@byKw;R%<6ZydQ#Y-e T6|9pT2@>^m^>bP0l+XkKwo84m literal 0 HcmV?d00001 diff --git a/mq-demo/images/image-20250519172210296.png b/mq-demo/images/image-20250519172210296.png new file mode 100644 index 0000000000000000000000000000000000000000..6d0d246f2f17a904fec53bacd1b1864634200b38 GIT binary patch literal 13385 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 X8X^SczV`R-I!IAg4O}X17W{t!XAh+Z literal 0 HcmV?d00001 diff --git a/mq-demo/src/main/java/cn/bunny/mq/mqdemo/mq/listener/MessageListenerOrder.java b/mq-demo/src/main/java/cn/bunny/mq/mqdemo/mq/listener/MessageListenerOrder.java index 30556ab..8738c7b 100644 --- a/mq-demo/src/main/java/cn/bunny/mq/mqdemo/mq/listener/MessageListenerOrder.java +++ b/mq-demo/src/main/java/cn/bunny/mq/mqdemo/mq/listener/MessageListenerOrder.java @@ -88,4 +88,10 @@ public class MessageListenerOrder { log.info("<延迟消息>----当前时间{}", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); } + /* 测试优先级队列 */ + @RabbitListener(queues = "queue.test.priority") + public void processMessagePriority(String dataString, Channel channel, Message message) throws IOException, InterruptedException { + log.info("<<优先级队列>>----{}", dataString); + } + } diff --git a/mq-demo/src/test/java/cn/bunny/mq/mqdemo/MqDemoApplicationTests.java b/mq-demo/src/test/java/cn/bunny/mq/mqdemo/MqDemoApplicationTests.java index 0b8711a..e9a2804 100644 --- a/mq-demo/src/test/java/cn/bunny/mq/mqdemo/MqDemoApplicationTests.java +++ b/mq-demo/src/test/java/cn/bunny/mq/mqdemo/MqDemoApplicationTests.java @@ -117,4 +117,21 @@ class MqDemoApplicationTests { messagePostProcessor ); } + + /* 测试消息优先级 */ + @Test + void priorityTest() { + for (int i = 0; i <= 10; i++) { + int finalI = i; + rabbitTemplate.convertAndSend("exchange.test.priority", + "routing.key.test.priority", + "优先级消息-" + i, + message -> { + // 设置优先级,不能超过设置的优先级,例如设置最高优先级 x-max-priority: 10 + // 最高不能超过10 + message.getMessageProperties().setPriority(finalI); + return message; + }); + } + } }