當RabbitMQ使用Publish發布消息出現數據格式問題的解決方法


前幾天公司內部開發,直接使用ADO的Adapter讀取的數據,沒有指定數據類型。遇到了一個使用publish發布消息之后,subscribe到的消息出現類型轉換的問題,調試后發現是RabbitMQ在序列化DataTable數據的時候,將時間格式序列化成UTC時間了,這樣一來,之前的代碼就沒用了。所以出現一個解決方案,這是目前我們用到的解決方案,可能還有其他更方便更簡潔的。下面是我使用的解決方案:publish出去的json無數據類型,那么有的時間格式序列化的正常,有的則被序列化成了UTC時間。現在我使用了一個xml來傳輸數據,在將數據序列化成xml傳輸的時候也出現了數據格式的問題,還是某些時間格式被序列化成了UTC時間。

這個時候就要考慮幾個問題:json是無數據類型的,傳輸的時候出現了問題;而xml傳輸也是沒有指定數據類型才造成這個問題的;如果我指定數據類型會怎么樣?於是使用幾行代碼來實現:

       public string WriteXml(DataTable dt)
        {
            using (StringWriter sw = new StringWriter())
            {
                dt.WriteXml(sw);
                return sw.ToString();
            }
        }

  

      public string WriteXmlSchema(DataTable dt)
        {
            using (StringWriter sw = new StringWriter())
            {
                dt.WriteXmlSchema(sw);
                return sw.ToString();
            }
        }    

  

於是在將數據序列化成xml的時候,也順便將數據的數據類型序列化成xml,這樣publish過去的就是:數據的xml和數據類型的xml兩個數據;在Consume的時候,將兩個數據進行合並:

       public DataTable XmlToDataTable(string xml, string xmlSchema )
        {
            DataTable dt = new DataTable();
            dt.ReadXml(xml);
            dt.ReadXmlSchema(xmlSchema);
            return dt;
        }

  

目前就是用這種方式解決了傳輸的DataTable在序列化的時候出現的時間格式的問題。

如果有遇到同樣問題,有比這個更好的解決辦法的;歡迎拍磚留言。

 

入群和一起聊技術.NET技術交流與招聘    群號:88390778


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM