主頁 > 區塊鏈 > ActiveMQ詳細入門教程系列(一)

ActiveMQ詳細入門教程系列(一)

2020-10-12 21:25:38 區塊鏈

在這里插入圖片描述

一、什么是訊息中間件

兩個系統或兩個客戶端之間進行訊息傳送,利用高效可靠的訊息傳遞機制進行平臺無關的資料交流,并基于資料通信來進行分布式系統的集成,通過提供訊息傳遞和訊息排隊模型,它可以在分布式環境下擴展行程間的通信,

訊息中間件,總結起來作用有三個:異步化提升性能、降低耦合度、流量削峰,
在這里插入圖片描述

系統A發送訊息給中間件后,自己的作業已經完成了,不用再去管系統B什么時候完成操作,而系統B拉去訊息后,執行自己的操作也不用告訴系統A執行結果,所以整個的通信程序是異步呼叫的,

二、訊息中間件的應用場景

2.1 異步通信

有些業務不想也不需要立即處理訊息,訊息佇列提供了異步處理機制,允許用戶把一個訊息放入佇列,但并不立即處理它,想向佇列中放入多少訊息就放多少,然后在需要的時候再去處理它們,

在這里插入圖片描述

2.2 緩沖

在任何重要的系統中,都會有需要不同的處理時間的元素,訊息佇列通過一個緩沖層來幫助任務最高效率的執行,該緩沖有助于控制和優化資料流經過系統的速度,以調節系統回應時間,

2.3 解耦

降低工程間的強依賴程度,針對異構系統進行適配,在專案啟動之初來預測將來專案會碰到什么需求,是極其困難的,通過訊息系統在處理程序中間插入了一個隱含的、基于資料的介面層,兩邊的處理程序都要實作這一介面,當應用發生變化時,可以獨立的擴展或修改兩邊的處理程序,只要確保它們遵守同樣的介面約束,
在這里插入圖片描述

2.4 冗余

有些情況下,處理資料的程序會失敗,除非資料被持久化,否則將造成丟失,訊息佇列把資料進行持久化直到它們已經被完全處理,通過這一方式規避了資料丟失風險,許多訊息佇列所采用的”插入-獲取-洗掉”范式中,在把一個訊息從佇列中洗掉之前,需要你的處理系統明確的指出該訊息已經被處理完畢,從而確保你的資料被安全的保存直到你使用完畢,

2.5 擴展性

因為訊息佇列解耦了你的處理程序,所以增大訊息入隊和處理的頻率是很容易的,只要另外增加處理程序即可,不需要改變代碼、不需要調節引數,便于分布式擴容,

2.6 可恢復性

系統的一部分組件失效時,不會影響到整個系統,訊息佇列降低了行程間的耦合度,所以即使一個處理訊息的行程掛掉,加入佇列中的訊息仍然可以在系統恢復后被處理,

2.7 順序保證

在大多使用場景下,資料處理的順序都很重要,大部分訊息佇列本來就是排序的,并且能保證資料會按照特定的順序來處理,

2.8 過載保護

在訪問量劇增的情況下,應用仍然需要繼續發揮作用,但是這樣的突發流量無法提取預知;如果以為了能處理這類瞬間峰值訪問為標準來投入資源隨時待命無疑是巨大的浪費,使用訊息佇列能夠使關鍵組件頂住突發的訪問壓力,而不會因為突發的超負荷的請求而完全崩潰,

2.9 資料流處理

分布式系統產生的海量資料流,如:業務日志、監控資料、用戶行為等,針對這些資料流進行實時或批量采集匯總,然后進行大資料分析是當前互聯網的必備技術,通過訊息佇列完成此類資料收集是最好的選擇,

三、常用訊息佇列(ActiveMQ、RabbitMQ、RocketMQ、Kafka)比較

特性MQActiveMQRabbitMQRocketMQKafka
生產者消費者模式支持支持支持支持
發布訂閱模式支持支持支持支持
請求回應模式支持支持不支持不支持
Api完備性
多語言支持支持支持java支持
單機吞吐量萬級萬級萬級十萬級
訊息延遲微秒級毫秒級毫秒級
可用性高(主從)高(主從)非常高(分布式)非常高(分布式)
訊息丟失理論上不會丟失理論上不會丟失
檔案的完備性
提供快速入門
社區活躍度
商業支持商業云商業云

四、訊息中間件的角色

Queue: 佇列存盤,常用與點對點訊息模型 ,默認只能由唯一的一個消費者處理,一旦處理訊息洗掉,

Topic: 主題存盤,用于訂閱/發布訊息模型,主題中的訊息,會發送給所有的消費者同時處理,只有在訊息可以重復處 理的業務場景中可使用,Queue/Topic都是 Destination 的子介面

ConnectionFactory: 連接工廠,客戶用來創建連接的物件,例如ActiveMQ提供的ActiveMQConnectionFactory

Connection: JMS Connection封裝了客戶與JMS提供者之間的一個虛擬的連接,

Destination: 訊息的目的地,目的地是客戶用來指定它生產的訊息的目標和它消費的訊息的來源的物件,JMS1.0.2規范中定義了兩種訊息傳遞域:點對點(PTP)訊息傳遞域和發布/訂閱訊息傳遞域,

點對點訊息傳遞域的特點如下:

  • 每個訊息只能有一個消費者,
  • 訊息的生產者和消費者之間沒有時間上的相關性,無論消費者在生產者發送訊息的時候是否處于運行狀態,它都可以提取訊息,

發布/訂閱訊息傳遞域的特點如下:

  • 每個訊息可以有多個消費者,
  • 生產者和消費者之間有時間上的相關性,
  • 訂閱一個主題的消費者只能消費自它訂閱之后發布的訊息,JMS規范允許客戶創建持久訂閱,這在一定程度上放松了時間上的相關性要求 ,持久訂閱允許消費者消費它在未處于激活狀態時發送的訊息,
    在點對點訊息傳遞域中,目的地被成為佇列(queue);在發布/訂閱訊息傳遞域中,目的地被成為主題(topic),

五、JMS的訊息格式

JMS訊息由以下三部分組成的:

  • 訊息頭:

    每個訊息頭欄位都有相應的getter和setter方法,

  • 訊息屬性:

    如果需要除訊息頭欄位以外的值,那么可以使用訊息屬性,

  • 訊息體:

    JMS定義的訊息型別有TextMessage、MapMessage、BytesMessage、StreamMessage和ObjectMessage,

訊息型別:

屬性型別
TextMessage文本訊息
MapMessagek/v
BytesMessage位元組流
StreamMessagejava原始的資料流
ObjectMessage序列化的java物件

六、訊息可靠性機制

只有在被確認之后,才認為已經被成功地消費了,訊息的成功消費通常包含三個階段 :客戶接收訊息、客戶處理訊息和訊息被確認在事務性會話中,當一個事務被提交的時候,確認自動發生,在非事務性會話中,訊息何時被確認取決于創建會話時的應答模式(acknowledgement mode),該引數有以下三個可選值:

  • Session.AUTO_ACKNOWLEDGE:當客戶成功的從receive方法回傳的時候,或者從MessageListener.onMessage方法成功回傳的時候,會話自動確認客戶收到的訊息,
  • Session.CLIENT_ACKNOWLEDGE:客戶通過訊息的acknowledge方法確認訊息,需要注意的是,在這種模式中,確認是在會話層上進行:確認一個被消費的訊息將自動確認所有已被會話消費的訊息,例如,如果一個訊息消費者消費了10個訊息,然后確認第5個訊息,那么所有10個訊息都被確認,
  • Session.DUPS_ACKNOWLEDGE:該選擇只是會話遲鈍的確認訊息的提交,如果JMS Provider失敗,那么可能會導致一些重復的訊息,如果是重復的訊息,那么JMS Provider必須把訊息頭的JMSRedelivered欄位設定為true,
6.1 優先級

可以使用訊息優先級來指示JMS Provider首先提交緊急的訊息,優先級分10個級別,從0(最低)到9(最高),如果不指定優先級,默認級別是4,需要注意的是,JMS Provider并不一定保證按照優先級的順序提交訊息,

6.2 訊息過期

可以設定訊息在一定時間后過期,默認是永不過期,

6.3 臨時目的地

可以通過會話上的createTemporaryQueue方法和createTemporaryTopic方法來創建臨時目的地,它們的存在時間只限于創建它們的連接所保持的時間,只有創建該臨時目的地的連接上的訊息消費者才能夠從臨時目的地中提取訊息,

七、什么是ActiveMQ

ActiveMQ是一種開源的基于JMS(Java Message Servie)規范的一種訊息中間件的實作,ActiveMQ的設計目標是提供標準的,面向訊息的,能夠跨越多語言和多系統的應用集成訊息通信中間件,

官網地址:http://activemq.apache.org/

7.1 存盤方式

1. KahaDB存盤: KahaDB是默認的持久化策略,所有訊息順序添加到一個日志檔案中,同時另外有一個索引檔案記錄指向這些日志的存盤地址,還有一個事務日志用于訊息回復操作,是一個專門針對訊息持久化的解決方案,它對典型的訊息使用模式進行了優化

特性:
1、日志形式存盤訊息;
2、訊息索引以 B-Tree 結構存盤,可以快速更新;
3、 完全支持 JMS 事務;
4、支持多種恢復機制kahadb 可以限制每個資料檔案的大小,不代表總計資料容量,

2. AMQ 方式: 只適用于 5.3 版本之前, AMQ 也是一個檔案型資料庫,訊息資訊最終是存盤在檔案中,記憶體中也會有快取資料,

3. JDBC存盤 : 使用JDBC持久化方式,資料庫默認會創建3個表,每個表的作用如下:

activemq_msgs:queue和topic的訊息都存在這個表中
activemq_acks:存盤持久訂閱的資訊和最后一個持久訂閱接收的訊息ID
activemq_lock:跟kahadb的lock檔案類似,確保資料庫在某一時刻只有一個broker在訪問

4. LevelDB存盤 : LevelDB持久化性能高于KahaDB,但是在ActiveMQ官網對LevelDB的表述:LevelDB官方建議使用以及不再支持,推薦使用的是KahaDB

5.Memory 訊息存盤: 顧名思義,基于記憶體的訊息存盤,就是訊息存盤在記憶體中,persistent=”false”,表示不設定持 久化存盤,直接存盤到記憶體中,在broker標簽處設定,

7.2 協議

協議官網API:http://activemq.apache.org/configuring-version-5-transports.html

  • Transmission Control Protocol (TCP):

    1. 這是默認的Broker配置,TCP的Client監聽埠是61616,
    2. 在網路傳輸資料前,必須要序列化資料,訊息是通過一個叫wire protocol的來序列化成位元組流,默認情況下,ActiveMQ把wire protocol叫做OpenWire,它的目的是促使網路上的效率和資料快速互動,
    3. TCP連接的URI形式:tcp://hostname:port?key=value&key=value
    4. TCP傳輸的優點:

      (1)TCP協議傳輸可靠性高,穩定性強
      (2)高效性:位元組流方式傳遞,效率很高
      (3)有效性、可用性:應用廣泛,支持任何平臺

  • New I/O API Protocol(NIO)

    1. NIO協議和TCP協議類似,但NIO更側重于底層的訪問操作,它允許開發人員對同一資源可有更多的client呼叫和服務端有更多的負載,

    2. 適合使用NIO協議的場景:

      (1)可能有大量的Client去鏈接到Broker上一般情況下,大量的Client去鏈接Broker是被作業系統的執行緒數所限制的,因此,NIO的實作比TCP需要更少的執行緒去運行,所以建議使用NIO協議
      (2)可能對于Broker有一個很遲鈍的網路傳輸NIO比TCP提供更好的性能

    3. NIO連接的URI形式:nio://hostname:port?key=value

    4. Transport Connector配置示例:

<transportConnectors>
  <transportConnector
    name="tcp"
    uri="tcp://localhost:61616?trace=true" />
  <transportConnector
    name="nio"
    uri="nio://localhost:61618?trace=true" />
</transportConnectors>
  • User Datagram Protocol(UDP)
    1:UDP和TCP的區別
    (1)TCP是一個原始流的傳遞協議,意味著資料包是有保證的,換句話說,資料包是不會被復制和丟失的,UDP,另一方面,它是不會保證資料包的傳遞的
    (2)TCP也是一個穩定可靠的資料包傳遞協議,意味著資料在傳遞的程序中不會被丟失,這樣確保了在發送和接收之間能夠可靠的傳遞,相反,UDP僅僅是一個鏈接協議,所以它沒有可靠性之說
    2:從上面可以得出:TCP是被用在穩定可靠的場景中使用的;UDP通常用在快速資料傳遞和不怕資料丟失的場景中,還有ActiveMQ通過防火墻時,只能用UDP
    3:UDP連接的URI形式:udp://hostname:port?key=value
    4:Transport Connector配置示例:
<transportConnectors>
    <transportConnector
        name="udp"
        uri="udp://localhost:61618?trace=true" />
</transportConnectors>
  • Secure Sockets Layer Protocol (SSL)
    1:連接的URI形式:ssl://hostname:port?key=value
    2:Transport Connector配置示例:
<transportConnectors>
    <transportConnector name="ssl" uri="ssl://localhost:61617?trace=true"/>
</transportConnectors>

八、案例(Hello World)

這里以windows為案例演示

下載地址:http://activemq.apache.org/components/classic/download/

8.1 安裝啟動

解壓后直接執行
bin/win64/activemq.bat

在這里插入圖片描述

8.2 web控制臺

http://localhost:8161/
賬號密碼:admin/admin

在這里插入圖片描述
在這里插入圖片描述

8.3 web控制臺

修改 ActiveMQ 組態檔 activemq/conf/jetty.xml
jettyport節點: 組態檔修改完畢,保存并重新啟動 ActiveMQ 服務

 <bean id="jettyPort" class="org.apache.activemq.web.WebConsolePort" init-method="start">
             <!-- the default port number for the web console -->
        <property name="host" value="127.0.0.1"/>
        <property name="port" value="8161"/>
    </bean>
8.4 開發

1. jar引入:

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

2. Sender :

import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;

/**
 * @program: activemq_01
 * @ClassName Sender
 * @description: 訊息發送
 * @author: muxiaonong
 * @create: 2020-10-02 13:01
 * @Version 1.0
 **/
public class Sender {

    public static void main(String[] args) throws Exception{
        // 1. 獲取連接工廠
        ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(
                ActiveMQConnectionFactory.DEFAULT_USER,
                ActiveMQConnectionFactory.DEFAULT_PASSWORD,
                "tcp://localhost:61616"
        );

        // 2. 獲取一個向activeMq的連接
        Connection connection = factory.createConnection();
        // 3. 獲取session
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

        // 4.找目的地,獲取destination,消費端,也會從這個目的地取訊息
        Queue queue = session.createQueue("user");

        // 5.1 訊息創建者
        MessageProducer producer = session.createProducer(queue);

        // consumer --> 消費者
        // producer --> 創建者
        // 5.2. 創建訊息
        for (int i = 0; i < 100; i++) {
            TextMessage textMessage = session.createTextMessage("hi:"+i);
            // 5.3 向目的地寫入訊息
            producer.send(textMessage);
            Thread.sleep(1000);
        }

        // 6.關閉連接
        connection.close();

        System.out.println("結束,,,,,");

    }
}

3. Receiver :


import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;


/**
 * @program: activemq_01
 * @ClassName Receiver
 * @description: 訊息接收
 * @author: muxiaonong
 * @create: 2020-10-02 13:01
 * @Version 1.0
 **/
public class Receiver {

    public static void main(String[] args) throws Exception{
        // 1. 獲取連接工廠
        ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(
                ActiveMQConnectionFactory.DEFAULT_USER,
                ActiveMQConnectionFactory.DEFAULT_PASSWORD,
                "tcp://localhost:61616"
        );

        // 2. 獲取一個向activeMq的連接
        Connection connection = factory.createConnection();
        connection.start();

        // 3. 獲取session
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

        // 4.找目的地,獲取destination,消費端,也會從這個目的地取訊息
        Destination queue = session.createQueue("user");

        // 5 獲取訊息
        MessageConsumer consumer = session.createConsumer(queue);

        while(true){
            TextMessage message = (TextMessage)consumer.receive();
            System.out.println("message:"+message.getText());
        }

    }
}

測驗結果:

message:hi:38
message:hi:39
message:hi:40
message:hi:41
message:hi:42
message:hi:43
message:hi:44
message:hi:45

web后臺顯示有一個消費者處于連接狀態,且已消費了68個message,而該條佇列已沒有message待消費了
在這里插入圖片描述

九、總結

今天的MQ入門教程系列就這里了,感興趣的小伙伴可以試試,遇到了什么問題,或者有疑問的,都可以在下方留言,小農看見了會第一時間回復大家,MQ作為一個訊息中間件,不管是面試還是作業中都會經常用到,所以是很有必要去了解和學習的一個技術點,今天的分享就到這里了,謝謝各位小伙伴的觀看,我們下篇文章見,大家加油!

牧小農 CSDN認證博客專家 Java后端 大資料 資料庫
專注Java領域開發,從使用技巧到底層原始碼,從資料庫到大資料,從多執行緒到高并發,你想要的這里都有,一個人可能走得更快,但是一群人會走得更遠,快快訂閱關注牧小農,讓我們一起走的更遠,關注小農,將知識打包帶走,大家加油

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/169552.html

標籤:區塊鏈

上一篇:洛谷CSP-J/S2020初賽模擬部分題解

下一篇:這次生日我想寫點什么

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • JAVA使用 web3j 進行token轉賬

    最近新學習了下區塊鏈這方面的知識,所學不多,給大家分享下。 # 1. 關于web3j web3j是一個高度模塊化,反應性,型別安全的Java和Android庫,用于與智能合約配合并與以太坊網路上的客戶端(節點)集成。 # 2. 準備作業 jdk版本1.8 引入maven <dependency> < ......

    uj5u.com 2020-09-10 03:03:06 more
  • 以太坊智能合約開發框架Truffle

    前言 部署智能合約有多種方式,命令列的瀏覽器的渠道都有,但往往跟我們程式員的風格不太相符,因為我們習慣了在IDE里寫了代碼然后打包運行看效果。 雖然現在IDE中已經存在了Solidity插件,可以撰寫智能合約,但是部署智能合約卻要另走他路,沒辦法進行一個快捷的部署與測驗。 如果團隊管理的區塊節點多、 ......

    uj5u.com 2020-09-10 03:03:12 more
  • 谷歌二次驗證碼成為區塊鏈專用安全碼,你怎么看?

    前言 谷歌身份驗證器,前些年大家都比較陌生,但隨著國內互聯網安全的加強,它越來越多地出現在大家的視野中。 比較廣泛接觸的人群是國際3A游戲愛好者,游戲盜號現象嚴重+國外賬號安全應用廣泛,這類游戲一般都會要求用戶系結名為“兩步驗證”、“雙重驗證”等,平臺一般都推薦用谷歌身份驗證器。 后來區塊鏈業務風靡 ......

    uj5u.com 2020-09-10 03:03:17 more
  • 密碼學DAY1

    目錄 ##1.1 密碼學基本概念 密碼在我們的生活中有著重要的作用,那么密碼究竟來自何方,為何會產生呢? 密碼學是網路安全、資訊安全、區塊鏈等產品的基礎,常見的非對稱加密、對稱加密、散列函式等,都屬于密碼學范疇。 密碼學有數千年的歷史,從最開始的替換法到如今的非對稱加密演算法,經歷了古典密碼學,近代密 ......

    uj5u.com 2020-09-10 03:03:50 more
  • 密碼學DAY1_02

    目錄 ##1.1 ASCII編碼 ASCII(American Standard Code for Information Interchange,美國資訊交換標準代碼)是基于拉丁字母的一套電腦編碼系統,主要用于顯示現代英語和其他西歐語言。它是現今最通用的單位元組編碼系統,并等同于國際標準ISO/IE ......

    uj5u.com 2020-09-10 03:04:50 more
  • 密碼學DAY2

    ##1.1 加密模式 加密模式:https://docs.oracle.com/javase/8/docs/api/javax/crypto/Cipher.html ECB ECB : Electronic codebook, 電子密碼本. 需要加密的訊息按照塊密碼的塊大小被分為數個塊,并對每個塊進 ......

    uj5u.com 2020-09-10 03:05:42 more
  • NTP時鐘服務器的特點(京準電子)

    NTP時鐘服務器的特點(京準電子) NTP時鐘服務器的特點(京準電子) 京準電子官V——ahjzsz 首先對時間同步進行了背景介紹,然后討論了不同的時間同步網路技術,最后指出了建立全球或區域時間同步網存在的問題。 一、概 述 在通信領域,“同步”概念是指頻率的同步,即網路各個節點的時鐘頻率和相位同步 ......

    uj5u.com 2020-09-10 03:05:47 more
  • 標準化考場時鐘同步系統推進智能化校園建設

    標準化考場時鐘同步系統推進智能化校園建設 標準化考場時鐘同步系統推進智能化校園建設 安徽京準電子科技官微——ahjzsz 一、背景概述隨著教育事業的快速發展,學校建設如雨后春筍,隨之而來的學校教育、管理、安全方面的問題成了學校管理人員面臨的最大的挑戰,這些問題同時也是學生家長所擔心的。為了讓學生有更 ......

    uj5u.com 2020-09-10 03:05:51 more
  • 位元幣入門

    引言 位元幣基本結構 位元幣基礎知識 1)哈希演算法 2)非對稱加密技術 3)數字簽名 4)MerkleTree 5)哪有位元幣,有的是UTXO 6)位元幣挖礦與共識 7)區塊驗證(共識) 總結 引言 上一篇我們已經知道了什么是區塊鏈,此篇說一下區塊鏈的第一個應用——位元幣。其實先有位元幣,后有的區塊 ......

    uj5u.com 2020-09-10 03:06:15 more
  • 北斗對時服務器(北斗對時設備)電力系統應用

    北斗對時服務器(北斗對時設備)電力系統應用 北斗對時服務器(北斗對時設備)電力系統應用 京準電子科技官微(ahjzsz) 中國北斗衛星導航系統(英文名稱:BeiDou Navigation Satellite System,簡稱BDS),因為是目前世界范圍內唯一可以大面積提供免費定位服務的系統,所以 ......

    uj5u.com 2020-09-10 03:06:20 more
最新发布
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:46:47 more
  • Hyperledger Fabric 使用 CouchDB 和復雜智能合約開發

    在上個實驗中,我們已經實作了簡單智能合約實作及客戶端開發,但該實驗中智能合約只有基礎的增刪改查功能,且其中的資料管理功能與傳統 MySQL 比相差甚遠。本文將在前面實驗的基礎上,將 Hyperledger Fabric 的默認資料庫支持 LevelDB 改為 CouchDB 模式,以實作更復雜的資料... ......

    uj5u.com 2023-04-16 07:28:31 more
  • .NET Core 波場鏈離線簽名、廣播交易(發送 TRX和USDT)筆記

    Get Started NuGet You can run the following command to install the Tron.Wallet.Net in your project. PM> Install-Package Tron.Wallet.Net 配置 public reco ......

    uj5u.com 2023-04-14 08:08:00 more
  • DKP 黑客分析——不正確的代幣對比率計算

    概述: 2023 年 2 月 8 日,針對 DKP 協議的閃電貸攻擊導致該協議的用戶損失了 8 萬美元,因為 execute() 函式取決于 USDT-DKP 對中兩種代幣的余額比率。 智能合約黑客概述: 攻擊者的交易:0x0c850f,0x2d31 攻擊者地址:0xF38 利用合同:0xf34ad ......

    uj5u.com 2023-04-07 07:46:09 more
  • Defi開發簡介

    Defi開發簡介 介紹 Defi是去中心化金融的縮寫, 是一項旨在利用區塊鏈技術和智能合約創建更加開放,可訪問和透明的金融體系的運動. 這與傳統金融形成鮮明對比,傳統金融通常由少數大型銀行和金融機構控制 在Defi的世界里,用戶可以直接從他們的電腦或移動設備上訪問廣泛的金融服務,而不需要像銀行或者信 ......

    uj5u.com 2023-04-05 08:01:34 more
  • solidity簡單的ERC20代幣實作

    // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 <0.9.0; import "hardhat/console.sol"; //ERC20 同質化代幣,每個代幣的本質或性質都是相同 //ETH 是原生代幣,它不是ERC20代幣, ......

    uj5u.com 2023-03-21 07:56:29 more
  • solidity 參考型別修飾符memory、calldata與storage 常量修飾符C

    在solidity語言中 參考型別修飾符(參考型別為存盤空間不固定的數值型別) memory、calldata與storage,它們只能修飾參考型別變數,比如字串、陣列、位元組等... memory 適用于方法傳參、返參或在方法體內使用,使用完就會清除掉,釋放記憶體 calldata 僅適用于方法傳參 ......

    uj5u.com 2023-03-08 07:57:54 more
  • solidity注解標簽

    在solidity語言中 注釋符為// 注解符為/* 內容*/ 或者 是 ///內容 注解中含有這幾個標簽給予我們使用 @title 一個應該描述合約/介面的標題 contract, library, interface @author 作者的名字 contract, library, interf ......

    uj5u.com 2023-03-08 07:57:49 more
  • 評價指標:相似度、GAS消耗

    【代碼注釋自動生成方法綜述】 這些評測指標主要來自機器翻譯和文本總結等研究領域,可以評估候選文本(即基于代碼注釋自動方法而生成)和參考文本(即基于手工方式而生成)的相似度. BLEU指標^[^?88^^?^]^:其全稱是bilingual evaluation understudy.該指標是最早用于 ......

    uj5u.com 2023-02-23 07:27:39 more
  • 基于NOSTR協議的“公有制”版本的Twitter,去中心化社交軟體Damus

    最近,一個幽靈,Web3的幽靈,在網路游蕩,它叫Damus,這玩意詮釋了什么叫做病毒式營銷,滑稽的是,一個Web3產品卻在Web2的產品鏈上瘋狂傳銷,各方大佬紛紛為其背書,到底發生了什么?Damus的葫蘆里,賣的是什么藥? 注冊和簡單實用 很少有什么產品在用戶注冊環節會有什么噱頭,但Damus確實出 ......

    uj5u.com 2023-02-05 06:48:39 more