rabbitmq--默認模式(點對點)

導入包:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

application.yml?

springrabbitmq:host: localhostport: 5672username: guestpassword: guestvirtual-host: /  # 默認虛擬主機listener:simple:acknowledge-mode: manual # 可根據需要設置為autopublisher-confirm-type: correlated

RabbitMQConfig.java
package com.example.dyreportapi.config;import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
@Configuration
public class RabbitMQConfig {public static final String DECLARE_QUEUE = "*****替換正式隊列名***"; // 申報隊列public static final String RESPONSE_QUEUE = "***替換正式隊列名**"; // 回執隊列public static final String RK_QUEUE = "***替換正式隊列名**"; // 出入庫隊列@Beanpublic Queue declareQueue() {return new Queue(DECLARE_QUEUE, true); // durable}@Beanpublic Queue responseQueue() {return new Queue(RESPONSE_QUEUE, true);}public Queue rkQUEUE() {return new Queue(RK_QUEUE, true);}@Beanpublic RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {RabbitTemplate template = new RabbitTemplate(connectionFactory);template.setConfirmCallback((correlationData, ack, cause) -> {if (ack) {System.out.println("消息成功投遞至 RabbitMQ Broker");} else {System.out.println("消息未投遞成功:" + cause);}});return template;}}

ResponseMessageListener.java?

import com.example.dyreportapi.config.RabbitMQConfig;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;@Component
public class ResponseMessageListener {@RabbitListener(queues = RabbitMQConfig.RESPONSE_QUEUE)public void receiveMessage(String message, Channel channel, Message amqpMessage) throws IOException {System.out.println("接收到回執消息: " + message);long deliveryTag = amqpMessage.getMessageProperties().getDeliveryTag();try {// 解析XML消息if (isXmlMessage(message)) {parseXmlMessage(message);}// 判斷是否是某個業務消息的回執if (message.contains("03355813-a4c0-49b8-955b-edd0e2934275") || message.contains("LT072303")) {System.out.println("? 匹配到本次發送的車輛備案回執!");// 正常確認消息channel.basicAck(deliveryTag, false);} else {// 不匹配的消息,拒絕并重新入隊給其他消費者處理channel.basicNack(deliveryTag, false, true); // requeue=true}} catch (Exception e) {System.err.println("處理消息時發生錯誤: " + e.getMessage());// 處理異常時,可以選擇重新入隊或不重新入隊channel.basicNack(deliveryTag, false, true);}}/*** 判斷消息是否為XML格式*/private boolean isXmlMessage(String message) {return message.trim().startsWith("<") && message.trim().endsWith(">");}/*** 解析XML消息并提取關鍵標簽*/private void parseXmlMessage(String xmlMessage) {try {DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();Document document = builder.parse(new ByteArrayInputStream(xmlMessage.getBytes("UTF-8")));// 獲取根元素Element root = document.getDocumentElement();System.out.println("根元素: " + root.getNodeName());// 解析常見的回執標簽示例parseCommonResponseTags(document);} catch (ParserConfigurationException | SAXException | IOException e) {System.err.println("XML解析失敗: " + e.getMessage());}}/*** 解析常見的回執標簽*/private void parseCommonResponseTags(Document document) {// 解析PRE_NO標簽NodeList preNoNodes = document.getElementsByTagName("PRE_NO");if (preNoNodes.getLength() > 0) {String preNo = preNoNodes.item(0).getTextContent();System.out.println("PRE_NO: " + preNo);}// 解析MESSAGE_ID標簽NodeList messageIdNodes = document.getElementsByTagName("MESSAGE_ID");if (messageIdNodes.getLength() > 0) {String messageId = messageIdNodes.item(0).getTextContent();System.out.println("MESSAGE_ID: " + messageId);}// 解析RESPONSE_CODE標簽NodeList responseCodeNodes = document.getElementsByTagName("RESPONSE_CODE");if (responseCodeNodes.getLength() > 0) {String responseCode = responseCodeNodes.item(0).getTextContent();System.out.println("RESPONSE_CODE: " + responseCode);}// 解析RESPONSE_MESSAGE標簽NodeList responseMessageNodes = document.getElementsByTagName("RESPONSE_MESSAGE");if (responseMessageNodes.getLength() > 0) {String responseMessage = responseMessageNodes.item(0).getTextContent();System.out.println("RESPONSE_MESSAGE: " + responseMessage);}// 解析NK_STATUS標簽NodeList nkStatusNodes = document.getElementsByTagName("NK_STATUS");if (nkStatusNodes.getLength() > 0) {String nkStatus = nkStatusNodes.item(0).getTextContent();System.out.println("NK_STATUS: " + nkStatus);}}
}
package com.example.dyreportapi.controller;import com.example.dyreportapi.service.VehicleDeclareSender;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class VehicleDeclareController {@Autowiredprivate VehicleDeclareSender sender;@GetMapping("/sendVehicle")public String sendVehicleDeclare() {sender.sendVehicleDeclareMessage();return "車輛備案報文已發送";}@GetMapping("/sendVehicleOut")public String sendVehicleOut() {sender.sendVehicleHfdMessage();return "車輛出廠報文已發送";}
}
package com.example.dyreportapi.service;import com.example.dyreportapi.config.RabbitMQConfig;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.UUID;@Service
public class VehicleDeclareSender {@Autowiredprivate RabbitTemplate rabbitTemplate;/*** 車輛備案報文*/public void sendVehicleDeclareMessage() {String messageId = UUID.randomUUID().toString();String messageDate = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));System.out.println(messageId);System.out.println(messageDate);String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +"<DECLARE_DATA>\n" +"  <MESSAGE_HEAD>\n" +"    <MESSAGE_TYPE>VEH101</MESSAGE_TYPE>\n" +// 報文類型"    <MESSAGE_ID>" + messageId + "</MESSAGE_ID>\n" +// 報文ID"    <MESSAGE_TYPE>VEH101</MESSAGE_TYPE>\n" +// 報文類型"    <PRE_NO>LT072303</PRE_NO>\n" +// 預錄入編號"    <B2B_NO>LT072303</B2B_NO>\n" +// 預錄入編號"    <MESSAGE_DATE>" + messageDate + "</MESSAGE_DATE>\n" +// 報文時間"    <SENDER_ID>3408660A06</SENDER_ID>\n" +// 發送方ID
//                "    <SEND_ADDRESS>安慶</SEND_ADDRESS>\n" +// 發送方地址"    <RECEIVER_ID>3329</RECEIVER_ID>\n" +// 接收方ID"  </MESSAGE_HEAD>\n" +"  <VEH101>\n" +"    <VEH_BSC>\n" +"      <VEHICLE_NO>皖A12345</VEHICLE_NO>\n" +// 車牌號"      <B2B_NO>皖A12345</B2B_NO>\n" +// 車牌號"      <VEHICLE_TYPE>3</VEHICLE_TYPE>\n" +// 車輛類型"      <VEHICLE_WT>12345.67</VEHICLE_WT>\n" +// 車輛重量"      <CUSTOMS_CODE>3329</CUSTOMS_CODE>\n" +// 關區代碼 備注:3329安慶綜保
//                "      <NOTE>測試車輛備案</NOTE>\n" +// 備注"      <DCL_TYPECD>1</DCL_TYPECD>\n" +// 申報類型 1:備案;2:變更;
//                "      <STEP_ID></STEP_ID>\n" +// 當前環節"      <DECLARE_CODE>3408660A06</DECLARE_CODE>\n" + // 申報公司編號"      <DECLARE_NAME>安慶振新汽車有限公司</DECLARE_NAME>\n" +// 申報公司名稱"      <CREATE_BY>admin</CREATE_BY>\n" +// 創建人"      <CREATE_TIME>" + messageDate + "</CREATE_TIME>\n" +// 創建時間"      <DECLARE_BY>admin</DECLARE_BY>\n" +// 申報人"      <DECLARE_TIME>" + messageDate + "</DECLARE_TIME>\n" +// 申報時間
//                "      <APPROVE_TIME></APPROVE_TIME>\n" +// 審核時間"    </VEH_BSC>\n" +"  </VEH101>\n" +"</DECLARE_DATA>";System.out.println("已發送車輛備案報文:" + xml);rabbitTemplate.convertAndSend(RabbitMQConfig.DECLARE_QUEUE, xml);System.out.println("已發送車輛備案報文至隊列:" + RabbitMQConfig.DECLARE_QUEUE);}/*** 整車出廠報文*/public void sendVehicleHfdMessage() {String messageId = UUID.randomUUID().toString();String messageDate = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));System.out.println(messageId);System.out.println(messageDate);/*** <?xml version="1.0" encoding="UTF-8" standalone="yes"?>* <JEERP_BZ>*     <MESSAGE_HEAD>*         <MESSAGE_TYPE>HFDB2B</MESSAGE_TYPE>*         <MESSAGE_ID>232ab09e-75d0-4fbe-a94e-c02f752c6cf6-20250729101240</MESSAGE_ID>*         <MESSAGE_TIME>2025-07-29T10:12:40</MESSAGE_TIME>*         <SENDER_ADDRESS></SENDER_ADDRESS>*         <RECEIVER_ID>JGEQ</RECEIVER_ID>*         <RECEIVER_ADDRESS></RECEIVER_ADDRESS>*         <CUSTOM_CODE>3329</CUSTOM_CODE>*         <SEQNO>HFD202507297719</SEQNO>*         <NOTE></NOTE>*         <POCKET_ID>null232ab09e-75d0-4fbe-a94e-c02f752c6cf6-20250729101240</POCKET_ID>*         <TOTAL_POCKET_QTY>1</TOTAL_POCKET_QTY>*         <CUR_POCKET_NO>1</CUR_POCKET_NO>*         <ROUTE_CODE></ROUTE_CODE>*     </MESSAGE_HEAD>*     <MESSAGE_BODY>*         <JG_HFD_HEAD_B2B>*             <ERP_NO>HFD202507297719</ERP_NO>*             <DCL_TYPECD>1</DCL_TYPECD>*             <PASSPORT_TYPECD>5</PASSPORT_TYPECD>*             <IO_TYPECD>I</IO_TYPECD>*             <MASTER_CUSCD>3329</MASTER_CUSCD>*             <AREAIN_ETPSNO>3408660A06</AREAIN_ETPSNO>*             <DCL_ETPSNO>3408660A06</DCL_ETPSNO>*             <INPUT_CODE>3408660A06</INPUT_CODE>*             <CREATE_USER>hxy0154</CREATE_USER>*             <VEHICLE_NO>LT072302</VEHICLE_NO>*             <VEHICLE_WT>10000</VEHICLE_WT>*             <TOTAL_GROSS_WT>560</TOTAL_GROSS_WT>*             <TOTAL_NET_WT>510</TOTAL_NET_WT>*             <CREATE_DATE>2025-07-29T10:12:40</CREATE_DATE>*             <TRAILER_NO>LT072302</TRAILER_NO>*             <PLAT_TYPECD>0</PLAT_TYPECD>*             <COL1>0</COL1>*             <IS_PP>0</IS_PP>*             <ETPS_PREENT_NO>HFD202507297719</ETPS_PREENT_NO>*         </JG_HFD_HEAD_B2B>*         <JG_HFD_LIST_B2B>*             <GUID_L>HFD202507297719_1</GUID_L>*             <PASSPORT_SEQNO>1</PASSPORT_SEQNO>*             <GDECD>LLDB1</GDECD>*             <GDS_NM>領料調撥</GDS_NM>*             <DCL_UNITCD>007</DCL_UNITCD>*             <DCL_QTY>30</DCL_QTY>*             <GROSS_WT>560</GROSS_WT>*             <NET_WT>510</NET_WT>*             <IS_GOODS>0</IS_GOODS>*         </JG_HFD_LIST_B2B>*     </MESSAGE_BODY>* </JEERP_BZ>*/// 構建基礎的XML頭部和尾部StringBuilder xmlBuilder = new StringBuilder();xmlBuilder.append("<?xml version=\"1.0\" encoding=\"UTF-8\"  standalone=\"yes\" ?>\n").append("<JEERP_BZ>\n").append("  <MESSAGE_HEAD>\n")//報文類型.append("    <MESSAGE_TYPE>HFDB2B</MESSAGE_TYPE>\n")//報文ID.append("    <MESSAGE_ID>").append(messageId).append("</MESSAGE_ID>\n")//報文發送時間.append("    <MESSAGE_TIME>").append(messageDate).append("</MESSAGE_TIME>\n")//發送方地址.append("    <SENDER_ADDRESS></SENDER_ADDRESS>\n")//申報公司編號.append("    <RECEIVER_ID>JGEQ</RECEIVER_ID>\n")//接收方地址.append("    <RECEIVER_ADDRESS></RECEIVER_ADDRESS>\n")//使用您提供的安慶關區代碼.append("    <CUSTOM_CODE>3329</CUSTOM_CODE>\n")//業務單號,唯一.append("    <SEQNO>HFD202507245559</SEQNO>\n")//備注.append("    <NOTE></NOTE>\n").append("    <POCKET_ID>").append(messageId).append("</POCKET_ID>\n").append("    <TOTAL_POCKET_QTY>1</TOTAL_POCKET_QTY>\n").append("    <CUR_POCKET_NO>1</CUR_POCKET_NO>\n").append("    <ROUTE_CODE></ROUTE_CODE>\n").append("  </MESSAGE_HEAD>\n").append("  <MESSAGE_BODY>\n").append("  <JG_HFD_HEAD_B2B>\n")//業務單號,唯一.append("    <ERP_NO>HFD202507245559</ERP_NO>\n")//申報類型 1備案  3作廢.append("    <DCL_TYPECD>1</DCL_TYPECD>\n")//核放單類型 5-卡口登記貨物 6-空車進出區.append("    <PASSPORT_TYPECD>5</PASSPORT_TYPECD>\n")//進出標志 I-進區,E-出區.append("    <IO_TYPECD>E</IO_TYPECD>\n")//主管海關.append("    <MASTER_CUSCD>3329</MASTER_CUSCD>\n")//國內企業編碼.append("    <AREAIN_ETPSNO>3408660A06</AREAIN_ETPSNO>\n")//申報單位代碼.append("    <DCL_ETPSNO>3408660A06</DCL_ETPSNO>\n")//錄入單位代碼.append("    <INPUT_CODE>3408660A06</INPUT_CODE>\n")//創建.append("    <CREATE_USER>hxy0154</CREATE_USER>\n")//車牌號.append("    <VEHICLE_NO>YQY99999</VEHICLE_NO>\n")//車自重.append("    <VEHICLE_WT>1000.19</VEHICLE_WT>\n")//貨物總毛重.append("    <TOTAL_GROSS_WT>560</TOTAL_GROSS_WT>\n")//貨物總凈重.append("    <TOTAL_NET_WT>510</TOTAL_NET_WT>\n")//創建時間.append("    <CREATE_DATE>").append(messageDate).append("</CREATE_DATE>\n")//掛車車牌號.append("    <TRAILER_NO>YQY99999</TRAILER_NO>\n")//是否無車輛運輸貨物 0 否 1是.append("    <PLAT_TYPECD>0</PLAT_TYPECD>\n")//到貨確認標記.append("    <COL1>0</COL1>\n")//是否拼票業務.append("    <IS_PP>0</IS_PP>\n")//企業內部編號.append("    <ETPS_PREENT_NO>HFD202507245559</ETPS_PREENT_NO>\n").append("  </JG_HFD_HEAD_B2B>\n");// 使用for循環生成多個JG_HFD_LIST_B2B項for (int i = 1; i <= 1; i++) {xmlBuilder.append("  <JG_HFD_LIST_B2B>\n")// 報文ID.append("    <GUID_L>HFD202507245559_").append(i).append("</GUID_L>\n")// 序號 從1開始遞增的正整數.append("    <PASSPORT_SEQNO>1</PASSPORT_SEQNO>\n")// 商品編碼.append("    <GDECD>LLDB1</GDECD>\n")// 商品名稱.append("    <GDS_NM>車輛1</GDS_NM>\n")// 申報計量單位.append("    <DCL_UNITCD>007</DCL_UNITCD>\n")// 申報數量.append("    <DCL_QTY>3</DCL_QTY>\n")// 申報毛重.append("    <GROSS_WT>560</GROSS_WT>\n")// 申報凈重.append("    <NET_WT>510</NET_WT>\n")// 是否商品.append("    <IS_GOODS>0</IS_GOODS>\n").append("  </JG_HFD_LIST_B2B>\n");}// 添加XML尾部xmlBuilder.append("  </MESSAGE_BODY>\n").append("</JEERP_BZ>");String xml = xmlBuilder.toString();System.out.println("已生成金關核放單報文:" + xml);rabbitTemplate.convertAndSend(RabbitMQConfig.RK_QUEUE, xml);System.out.println("已發送車輛出入庫消息:" + RabbitMQConfig.RK_QUEUE);}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/93534.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/93534.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/93534.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

外網訪問文檔編輯器Docsify(Windows版本),內網穿透技術應用簡便方法

如果你正在為項目寫文檔&#xff0c;但又不想折騰復雜的構建流程&#xff0c;也不想維護一堆靜態 HTML 文件&#xff0c;那你一定要試試 docsify。docsify 是一個基于 JavaScript 的開源文檔生成工具&#xff0c;它最大的特點就是“無構建”&#xff1a;你只需要寫 Markdown 文…

第4章唯一ID生成器——4.5 美團點評開源方案Leaf

Leaf是美團點評公司基礎研發平臺推出的一個唯一ID生成器服務&#xff0c;其具備高可靠性、低延遲、全局唯一等特點&#xff0c;目前已經被廣泛應用于美團金融、美團外賣、美團酒旅等多個部門。Leaf根據不同業務的需求分別實現了Leaf-segment和Leaf-snowflake兩種方案&#xff0…

分布式搜索和分析引擎Elasticsearch實戰指南

ES 介紹與安裝 Elasticsearch&#xff0c; 簡稱 ES&#xff0c;它是個開源分布式搜索引擎&#xff0c;它的特點有&#xff1a;分布式&#xff0c;零配置&#xff0c;自動發現&#xff0c;索引自動分片&#xff0c;索引副本機制&#xff0c;restful 風格接口&#xff0c;多數據源…

【13】C# 窗體應用WinForm——.NET Framework、WinForm、工程創建、工具箱簡介、窗體屬性及創建

文章目錄1. WinForm工程創建 及 界面介紹1.1 WinForm工程創建1.2 窗體 Form1.cs “查看代碼”1.3 打開窗體設計器2. 工具箱3. 窗體屬性及創建3.1 窗體屬性3.2 實例&#xff1a;創建一個新窗體3.2.1 添加新Windows窗體3.2.2 窗體屬性配置3.2.3 設置該窗體為啟動窗體WinForm 是 W…

論文閱讀-IGEV

文章目錄1 概述2 模塊2.1 總體說明2.2 特征抽取器2.3 CGEV2.4 基于Conv-GRU的更新算子2.5 空間上采樣2.6 損失函數3 效果參考文獻1 概述 在雙目深度估計中&#xff0c;有一類是基于3D卷積的方法&#xff0c;代表就是PSMNet&#xff0c;它應用 3D 卷積編碼器-解碼器來聚合和正則…

[2025CVPR-圖象分類方向]SPARC:用于視覺語言模型中零樣本多標簽識別的分數提示和自適應融合

1. ?背景與問題定義? 視覺語言模型&#xff08;如CLIP&#xff09;在單標簽識別中表現出色&#xff0c;但在零樣本多標簽識別&#xff08;MLR&#xff09;任務中表現不佳。MLR要求模型識別圖像中多個對象&#xff08;例如&#xff0c;圖像包含“貓”和“沙發”&#xff09;&…

2025創始人IP如何破局?

內容持續更新卻無人點贊&#xff0c;課程精心打磨卻無人報名&#xff0c;直播賣力講解卻無人停留 —— 明明有內容、有經驗、有成果&#xff0c;卻始終難以打動用戶。問題的核心&#xff0c;或許在于你尚未打造出真正的 “創始人IP”。?一、創始人IP&#xff1a;不止標簽&…

告別配置混亂!Spring Boot 中 Properties 與 YAML 的深度解析與最佳實踐

一、Spring配置文件 1.1、什么是Spring配置 Spring配置指的是在Spring框架中定義和管理應用程序組件&#xff08;如Bean&#xff09;及其依賴關系的過程 作用&#xff1a; 配置文件主要用于解決硬編碼問題&#xff0c;它將可能變更的信息集中存放。程序啟動時&#xff0c;會從…

無人機噴灑系統技術要點與難點解析

一、 模塊運行方式1. 任務規劃與加載模塊&#xff1a;輸入&#xff1a;農田邊界、障礙物信息、作物類型、病蟲害信息、所需噴灑量、天氣條件。運行&#xff1a;利用地面站軟件或移動APP&#xff0c;規劃最優飛行路徑&#xff0c;設定飛行高度、速度、噴灑參數、作業區域。將規…

mongodb源代碼分析createCollection命令創建Collection流程分析

MongoDB 提供兩種方式創建集合&#xff1a;隱式創建 和 顯式創建。方式 1&#xff1a;隱式創建&#xff08;推薦&#xff09;當你向不存在的集合中插入文檔時&#xff0c;MongoDB 會自動創建該集合。示例在 db中隱式創建 users 集合&#xff1a;javascriptdb.users.insertOne({…

c++注意點(13)----設計模式(抽象工廠)

創建型模式抽象工廠模式&#xff08;Abstract Factory Pattern&#xff09;是一種創建型設計模式&#xff0c;它提供一個接口&#xff0c;用于創建一系列相關或相互依賴的對象&#xff0c;而無需指定它們具體的類。簡單說&#xff0c;它就像一個 "超級工廠"&#xff…

【大語言模型入門】—— Transformer 如何工作:Transformer 架構的詳細探索

Transformer 如何工作&#xff1a;Transformer 架構的詳細探索Transformer 如何工作&#xff1a;Transformer 架構的詳細探索什么是 Transformer&#xff1f;什么是 Transformer 模型&#xff1f;歷史背景從 RNN 模型&#xff08;如 LSTM&#xff09;到 Transformer 模型在 NLP…

iOS安全和逆向系列教程 第20篇:Objective-C運行時機制深度解析與Hook技術

iOS安全和逆向系列教程 第20篇:Objective-C運行時機制深度解析與Hook技術 引言 在上一篇文章中,我們深入學習了ARM64匯編語言的基礎知識,掌握了從寄存器操作到指令分析的完整技能體系。現在,我們將把這些底層知識與iOS應用的高層邏輯聯系起來,深入探討Objective-C運行時…

IDEA中全局搜索快捷鍵Ctrl+Shift+F為何失靈?探尋原因與修復指南

在軟件開發中&#xff0c;高效地查找和管理代碼是提升生產力的關鍵。IntelliJ IDEA&#xff0c;作為一款功能強大的集成開發環境&#xff08;IDE&#xff09;&#xff0c;提供了豐富的搜索功能&#xff0c;幫助開發者迅速定位代碼、資源、甚至是IDE功能本身。 在 IntelliJ IDE…

【學習筆記】Lean4 定理證明 ing

文章目錄概述Lean4 定理證明初探示例&#xff1a;證明 1 1 2示例&#xff1a;證明 2 * (x y) 2 * x 2 * yLean4 定理證明基礎命題與定理命題&#xff08;Proposition&#xff09;定理&#xff08;Theorem&#xff09;量詞策略概述 Lean證明是指在Lean環境中&#xff0c;通…

墨者:SQL注入漏洞測試(HTTP頭注入)

墨者學院&#xff1a;SQL注入漏洞測試(HTTP頭注入)&#x1f680; 1. 什么是HTTP頭注入&#xff1f;&#x1f50d; HTTP頭注入是指攻擊者通過篡改HTTP請求頭部的字段&#xff08;如User-Agent、Referer、Cookie、Host等&#xff09;&#xff0c;將惡意SQL代碼插入到后端數據庫查…

linux_前臺,后臺進程

*在用戶訪問端口時&#xff0c;操作系統會形成對應的session,在其的內部進一步形成bash等進程 *一個會話只有一個前臺進程&#xff0c;可以有多個后臺進程&#xff0c;前臺與后臺進程的區別在于誰擁有鍵盤的使用權*前臺與后臺進程都可以訪問顯示器但是后臺無法訪問標準輸入獲取…

spring data mongodb 入門使用手冊

<!--pom.xml引入依賴--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency>文檔映射類Student.java import lombok.Data; import lombok.NoArgsCons…

Fastjson2常用操作大全:對象、字符串、集合、數組、Map與JSON互轉實戰

高性能&#xff1a; 核心解析器和生成器經過深度優化&#xff0c;性能遠超許多同類庫。 功能豐富&#xff1a; 支持標準JSON、JSONPath查詢、泛型處理、日期格式化、自定義序列化/反序列化等。 易用性&#xff1a; API 設計簡潔直觀&#xff0c;JSON 工具類提供了最常用的 toJS…

大模型——字節Coze重磅開源!Dify何去何從

大模型——字節Coze重磅開源!Dify何去何從 想必很多人盼了很久,就在昨晚,字節Coze終于開源了!Coze Studio 是字節跳動新一代 AI Agent 開發平臺扣子(Coze)的開源版本。 提供 AI Agent 開發所需的全部核心技術:Prompt、RAG、Plugin、Workflow,使得開發者可以聚焦創造 A…