【Java8新特性】接口中的默認方法和靜態方法,你都掌握了嗎?_網頁設計

網頁設計最專業,超強功能平台可客製化

窩窩以「數位行銷」「品牌經營」「網站與應用程式」「印刷品設計」等四大主軸,為每一位客戶客製建立行銷脈絡及洞燭市場先機。

寫在前面

在Java8之前的版本中,接口中只能聲明常量和抽象方法,接口的實現類中必須實現接口中所有的抽象方法。而在Java8中,接口中可以聲明默認方法和靜態方法,本文,我們就一起探討下接口中的默認方法和靜態方法。

接口中的默認方法

Java 8中允許接口中包含具有具體實現的方法,該方法稱為“默認方法”,默認方法使用 default 關鍵字修飾 。

例如,我們可以定義一個接口MyFunction,其中,包含有一個默認方法getName,如下所示。

public interface MyFunction<T>{
    T get(Long id);
    default String getName(){
        return "binghe";
    }
}

默認方法的原則

在Java8中,默認方法具有“類優先”的原則。

若一個接口中定義了一個默認方法,而另外一個父類或接口中又定義了一個同名的方法時,遵循如下的原則。

1.選擇父類中的方法。如果一個父類提供了具體的實現,那麼接口中具有相同名稱和參數的默認方法會被忽略。

例如,現在有一個接口為MyFunction,和一個類MyClass,如下所示。

  • MyFunction接口
public interface MyFunction{
    default String getName(){
        return "MyFunction";
    }
}
  • MyClass類
public class MyClass{
    public String getName(){
        return "MyClass";
    }
}

此時,創建SubClass類繼承MyClass類,並實現MyFunction接口,如下所示。

public class SubClass extends MyClass implements MyFunction{
    
}

接下來,我們創建一個SubClassTest類,對SubClass類進行測試,如下所示。

public class SubClassTest{
    @Test
    public void testDefaultFunction(){
        SubClass subClass = new SubClass();
        System.out.println(subClass.getName());
    }
}

運行上述程序,會輸出字符串:MyClass。

台北網頁設計公司這麼多該如何選擇?

網動是一群專業、熱情、向前行的工作團隊,我們擁有靈活的組織與溝通的能力,能傾聽客戶聲音,激發創意的火花,呈現完美的作品

2.接口衝突。如果一個父接口提供一個默認方法,而另一個接口也提供了一個具有相同名稱和參數列表的方法(不管方法是否是默認方法), 那麼必須覆蓋該方法來解決衝突。

例如,現在有兩個接口,分別為MyFunction和MyInterface,各自都有一個默認方法getName(),如下所示。

  • MyFunction接口
public interface MyFunction{
    default String getName(){
        return "function";
    }
}
  • MyInterface接口
public interface MyInterface{
    default String getName(){
        return "interface";
    }
}

實現類MyClass同時實現了MyFunction接口和MyInterface接口,由於MyFunction接口和MyInterface接口中都存在getName()默認方法,所以,MyClass必須覆蓋getName()方法來解決衝突,如下所示。

public class MyClass{
    @Override
    public String getName(){
        return MyInterface.super.getName();
    }
}

此時,MyClass類中的getName方法返回的是:interface。

如果MyClass中的getName()方法覆蓋的是MyFunction接口的getName()方法,如下所示。

public class MyClass{
    @Override
    public String getName(){
        return MyFunction.super.getName();
    }
}

此時,MyClass類中的getName方法返回的是:function。

接口中的靜態方法

在Java8中,接口中允許添加靜態方法,使用方式接口名.方法名。例如MyFunction接口中定義了靜態方法send()。

public interface MyFunction{
    default String getName(){
        return "binghe";
    }
    static void send(){
        System.out.println("Send Message...");
    }
}

我們可以直接使用如下方式調用MyFunction接口的send靜態方法。

MyFunction.send();

寫在最後

如果覺得文章對你有點幫助,請微信搜索並關注「 冰河技術 」微信公眾號,跟冰河學習Java8新特性。

最後,附上Java8新特性核心知識圖,祝大家在學習Java8新特性時少走彎路。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

※推薦評價好的iphone維修中心

擁有專業的維修技術團隊,同時聘請資深iphone手機維修專家,現場說明手機問題,快速修理,沒修好不收錢

HotRing: A Hotspot-Aware In-Memory Key-Value Store(FAST ’20)_貨運

※智慧手機時代的來臨,RWD網頁設計為架站首選

網動結合了許多網際網路業界的菁英共同研發簡單易操作的架站工具,及時性的更新,為客戶創造出更多的網路商機。

  本文主要解決的是基於內存的K-V存儲引擎在實際應用中出現的熱點問題,設計了一個熱點可感知的KV存儲引擎,極大的提升了KV存儲引擎對於熱點數據訪問的承載能力。

Introduction

  熱點問題,可以理解為在一個嚴重傾斜的工作負載下,頻繁的訪問和操作某一小部分數據。

  如圖,是阿里的不同業務中數據訪問分佈情況,大量的數據訪問只集中在少部分的熱點數據中。在平常的情況下,百分之五十的用戶訪問請求只是針對其中百分之一的數據,在一些極端的情況下,當新產品發售後,大量的粉絲瘋狂進行搶購下單,業務的訪問量基本都聚集在某一小部分數據上,會出現百分之九十的用戶請求針對其中百分之一的數據。

   目前有一些方法來解決熱點數據問題:

  •      使用一致性哈希算法將數據分片,分佈到多個節點上,分攤熱點訪問。(Scale out using consistent hashing
  •      將熱點數據備份到多個節點上,分攤熱點訪問。 (Replication in multi-node
  •      客戶端緩存:通過預先標記熱點,設置客戶端層面的緩存。減小鍵值存儲系統的負載壓力。(Front-end cache

     第一種和第二種方法中因為節點的添加,會使得系統的成本會大大增加。第三種方法,如果用戶請求中涉及到很多數據更新的請求,對客戶端層面的緩存的數據需要維護,這個過程實現會變得很複雜。

 本篇論文則是從提升單個點對熱點數據的處理能力出發(Improve Single node’s ability to handle hotspots),設計了一種熱點可感知的鍵值數據結構,實現在嚴重傾斜的工作負載下,快速的完成用戶的訪問請求。

Prior work 

  現有很多基於內存的鍵值存儲引擎通常採用鏈式哈希作為索引,這種索引結構對熱數據是無法感應到,數據項被隨機的分佈在鏈表上。如果圖中item3是一個熱數據項,他處在某一鏈表的尾部,需要經過多次內存訪問才可以將item3的數據取出來。如果高度傾斜的工作負載下,要通過多次內存訪問才可以的得到item3,會使得系統的性能就會很低下。如果可以將熱點數據放置在衝突鏈頭部,那麼系統對於熱點數據的訪問將會有更快的響應速度。

 

Challenges 

  設計一個熱點可感知的索引結構需要解決兩個問題:

  • 數據的熱度是動態變化的,必須實現動態的熱點感知,保證熱點時效性。
  • 無鎖化處理,基於內存的鍵值存儲引擎性能是很敏感的,要保證高性能就必須支持無鎖的併發讀/寫操作

Design of HotRing   

  論文提出的索引結構被稱作hotring,與傳統的哈希結構不同的是,將哈希表中的鏈式結構改成了環,哈希表中存儲的頭指針可以指向環中的任意數據項。當鏈表變成環的時候,以頭指針所指的數據項為起點,查找要訪問的元素,如果元素不存在,就會一直循環查找下去,因此,作者將該還設計成一個有序環。

      在變成有序環的時候,因為表示key大小所用的字節數一般不會少(通常為10-100字節大小),只是簡單的對key進行排序,比較會帶來巨大的開銷。我們構建字典序:order = (tag, key)。先根據tag進行排序,tag相同再根據key進行排序:以itemB舉例,鏈式哈希需要遍歷所有數據才能返回read miss。而HotRing在訪問itemA與C后,即可確認B read miss。

Hotspot Shift Identification

  每段時間用戶的訪問需求在不斷變化,數據的熱度是動態變化的,HotRing實現了兩種策略來實現周期性的動態識別熱點並調整頭指針指向。

  1. 隨機移動策略
  2. 採樣分析策略

   隨機移動策略

   每個線程維護一個變量,記錄執行了多少次請求,每R次訪問,移動頭指針指向第R次訪問的數據項。若指針已經指向該數據項,則頭指針不移動。該策略的優勢是, 不需要額外的元數據開銷,實現簡單,響應速度快。

   缺點:

  • 若R小,找到熱點的時間會很短,但是可能造成頻繁的頭指針移動。
  • 若用戶的訪問負載傾斜程度小,頭指針移動的頻率會變高,效率就會降低。
  • 難以處理環中多個熱點數據。

  採樣分析策略

       使用該策略時,同樣的,在R次訪問后,若第R次訪問的item已經是頭指針指向的item,則不啟動採樣,否則,嘗試啟動對應衝突環的進行採樣。

在介紹採樣策略之前,先介紹一下頭指針和數據項對應的數據結構。頭指針head包括:

  • active:1 bit,作為控制採樣分析的標識。
  • total_counter:15 bits,當前環總共的訪問次數。
  • address:48 bits,環的頭地址(x86-64上目前只使用了48位)。

而環上每一項的next包括(因為現代操作系統所使用的內存地址空間使用64bit,而環中下一項的地址實際只需要48bit即可表示,其餘的16bit來控制併發,訪問次數等信息):

  • rehash:1 bit,作為控制rehash的標識。
  • occupied:1 bit,用於併發控制,保證併發訪問的正確性。
  • counter:14 bits,該項的訪問次數。
  • address:48 bits,下一項的地址。

  現在開始介紹採樣分析策略,如果第R次訪問數據項並不是頭指針指向的數據項,說明熱點數據已經發生了變化,這個時候會對衝突環進行採樣。採樣的過程如下:

  1. 打開head.active(CAS)
  2. 後續的請求的訪問記錄會被記錄到頭指針的total_count和對應item的的next.count(CAS)採樣個數也是R
  3. 採樣結束后,將頭指針的採樣標記恢復過來。

     CAS(Compare And Swap):當要操作內存中某一個變量的時候,會記錄下變量中的舊值,通過對舊值進行一系列的操作后得到新值,然後將舊值會與內存中的變量做比較,如果不相同,則說明內存中的值在這期間內被修改過,這時CAS操作將會失敗,新值將不會被寫入內存。如果相同,使內存中的變量變為新值。

     對數據採樣結束后,利用已有的信息可以進行判斷將哪一個數據項作為頭節點。具體過程如下:

  1. 遍歷環,計算每一項的訪問頻率。(第k項的訪問次數nk,環中所有項的訪問次數為N,則第k項的訪問頻率為nk/N)。
  2. 計算每個節點的收益W,取最小的收益的數據項作為新的熱數據項。每一項的受益值的計算公式如下,假設現在求第k項的收益,即計算所有項到該項的距離乘以該項的訪問頻率,求得每一項的期望值,選擇最小的期望值作為新的頭節點:

    3. 使用CAS原子操作將新的頭指針指向數據項。

    4. 重置頭指針和數據項的計數器。

 Write-Intensive Hotspot with RCU 

  在一般情況下,對於更新操作,HotRing可以對不超過8字節的數據進行update-in-place原子更新操作,這種情況下,讀取和更新被視作一樣的操作。但對於超過8個字節的大數據進行更新,hotring則會使用read-copy-update協議,RCU——更新數據的時候,首先拷貝一個副本,然後對副本進行修改,最後使用一個回調(callback)機制在適當的時機把指向原來數據的指針重新指向新的被修改的數據,這個期間數據都是可以隨意讀的。

  當更新的數據項是頭指針指向的熱數據項時,因為要修改前一個數據項的next指針,需要遍歷整個環來獲取頭節點的前一項。如圖,遍歷得到熱數據的前一項需要花費大量的內存訪問開銷。論文在這種情況下,更新的只是前一項的計數器,其他項的計數器不變,這樣可以使得頭指針可以在後面的策略調整中直接指向熱數據的前一項,使得對熱數據的更新需要的內存訪問操作就會減少。

 

 

Concurrent Operations

  1.Read操作

   Hotringd的讀取不需要任何的操作,操作完全無鎖。

  2.Insert操作

  當兩個線程都在B、D之間插入時,對原來結構的修改,只涉及到B項的next項,修改B項的next項的競爭衝突可以通過CAS保證線程安全。若前一項next字段發生競爭,CAS會失敗,此時操作需要重試。

 

3.Update操作

※評比南投搬家公司費用收費行情懶人包大公開

搬家價格與搬家費用透明合理,不亂收費。本公司提供下列三種搬家計費方案,由資深專業組長到府估價,替客戶量身規劃選擇最經濟節省的計費方式

  當更新的數據不超過8字節:使用in-place update方法去更新即可,不需要其它操作,線程安全可以通過CAS保證。當更新的數據超過8字節:使用RCU更新,因為採用RCU方法,這時候需要分3種情況:

   ①RCU-update & Insert

  2個線程分別更新B和插入C,兩個線程對原來結構的影響分別是修改A的next指針和修改B的next指針,即便存在CAS操作,但兩者之間不存在衝突,所以兩個操作都會成功,但結果肯定不是我們所希望的。

 

 

   解決辦法:RCU-update前,嘗試CAS修改B.next值,置B.next.occupy = 1。另外一個線程的在完成插入操作時,使用CAS原子操作訪問前一個節點B的next字段,發現該字段的occupy位為1,操作會失敗,重試。操作完成后,新版本項的occupy為0。

  ②RCU-update & RCU-update

  2個線程分別更新B和更新D,兩個線程對原來結構的影響分別是修改A的next指針和修改B的next指針,即便存在CAS操作,但兩者之間不存在衝突,所以兩個操作都會成功,但結果肯定不是我們所希望的。

   解決辦法:更新B的時候,創建一個新的數據項B’,使用CAS操作修改B的,置B.next.occupy = 1,當另一個線程修改D節點后,使用CAS連接前一個節點B的時候,發現B.next.occupy = 1,操作會失敗,重試。

  ③RCU-update & Delete 

  2個線程分別刪除B和更新D,會出現和上述一樣的問題。此處不再贅述。

 4.頭指針在併發下的移動操作

  • 當要移動頭指針時,為了避免新的頭節點在這個過程中出現更新或者刪除的情況,導致頭指針可能指向無效的數據項,我們會通過CAS設置新的頭節點的occupy為1,保證不被被其他操作更新/刪除。
  • 當頭節點被更新時:更新時會設置新版本的頭節點occupy為1,使得其他操作無法對新節點造成影響。將頭指針指向新的頭節點,將新版本的occupy標記為0
  • 當頭節點被刪除時:除了設置當前被刪除的頭節點occupy為1,還得設置下一項的occupy為1,因為下一項是新的頭節點,需要保證其不被更新/刪除

 Lock-free Rehash

     當衝突環上存在多個熱點數據時,鍵值對存儲引擎的性能就會大大降低。因此HotRing設計了無鎖rehash策略來解決這一問題。和普通的哈希表不同的是使用負載因子來觸發rehash不同,HotRing使用訪問開銷(即操作平均內存訪問次數)來觸發rehash,文中設置平均內存訪問次數超過2的時候,就會自動觸發。HotRing rehash分為3步:

  1. 初始化 ——首先創建線程來專門處理rehash操作,初始化一個2倍大小的散列表,復用tag的最高一位來進行索引,將原先的一個環拆分成了兩個環。根據tag範圍對數據項進行劃分。假設tag最大值為T,tag範圍為[0,T),則兩個新的頭指針對應tag範圍為[0,T/2)和[T/2,T)。然後該線程創建一個rehash node,裡面包含2個rehash child item,作為2個新環的頭,它的格式和data item一樣,但是tag值分別是0和T/2。

                                                                                               

  2. 分割——接下來需要分割原有的環到2個新的環。如圖,因為itemB和E是tag的範圍邊界,所以線程會將兩個rehash item節點分別插入到itemB和E之前。到目前為止,已經在邏輯上將衝突環一分為二。

 

 

 

 

  3. 刪除——最後一步,將每一個環中首尾兩部分連接在一起。此外,還有一些收尾工作,包括舊哈希表的回收、以及rehash節點的刪除回收等。需要注意的是,在完成刪除操作之前,要確保所有對舊哈希表的訪問已經結束。只有rehash線程會阻塞一段時間。

 

 Evaluation

Experimental Setting

  在一台內存容量為32GB的服務器上測試的,測試的時候使用YCSB提供5種工作負載,默認情況下,使用64個線程在兩億五千萬個鍵值對測試負載B,在測試負載中,有百分之97.8的操作是針對其中百分只1的數據,百分之99.8的操作是針對10%的數據,

Deployment

  •   HotRing-r (random movement strategy)
  •   HotRing-s (sampling statistics strategy)

Baselines

  • Chaining Hash(a lock-free chain-based hash index that is modified from the hash structure in Memcached.)
  • FASTER(SIGMOD 2019)
  • Masstree
  • Memcached

在單線程和多線程情況下,對這幾種數據結構的性能進行了測試。Hotring在大量讀操作的情況下,可以實現一個很高的性能。

  下圖中,左圖表明,鏈或者環中數據項的個數即便很多,hotring也可以保持一個很好的性能。右圖表明hotring在數據訪問呈現嚴重傾斜的情況下,也能保持非常好的性能。(θ是齊夫分佈的參數,YCSB生成工作負載時, θ的值越高,表明測試的所使用負載的傾斜程度就越嚴重。)

   在下圖中,左圖表明hotring在read miss的情況下的性能比chaining hash的性能要好。這是因為hotring中每一個桶的環是有序的,判斷元素不存在不需要遍歷桶中的所有元素。右圖熱點切換時,不同的熱點選擇策略穩定下來需要的時間,hotring-r在兩秒內就可以達到一種穩定的狀態了。

   在分裂前,為了保證從舊哈希表進入的訪問均已經返回,rehash的過程被阻塞一段時間,隨着數據容量的不斷增長,rehash操作可以維持這個穩定的性能。如下圖所示:

 

參考資料:

1.Jiqiang Chen, Liang Chen, Sheng Wang, Guoyun Zhu, Yuanyuan Sun, Huan Liu, Feifei Li:HotRing: A Hotspot-Aware In-Memory Key-Value Store. FAST 2020: 239-252

2. 最快KV引擎!存儲頂會FAST’20論文揭秘Tair創新性引擎

3.Presentation Video 

 

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

※回頭車貨運收費標準

宇安交通關係企業,自成立迄今,即秉持著「以誠待人」、「以實處事」的企業信念

RabbitMQ 高級應用_網頁設計公司

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

節能減碳愛地球是景泰電動車的理念,是創立景泰電動車行的初衷,滿意態度更是服務客戶的最高品質,我們的成長來自於你的推薦。

 

 

本文是作者原創,版權歸作者所有.若要轉載,請註明出處.

本文RabbitMQ版本為rabbitmq-server-3.7.17,erlang為erlang-22.0.7.請各位去官網查看版本匹配和下載,也可以留言,我發安裝包

 

過期時間TTL(Time To Live)

過期時間TTL表示可以對消息設置預期的時間,在這個時間內都可以被消費者接收穫取;過了之後消息將自動被刪除。RabbitMQ可以對消息和隊列設置TTL。目前有兩種方法可以設置。

  • 第一種方法是通過隊列屬性設置,隊列中所有消息都有相同的過期時間。
  • 第二種方法是對消息進行單獨設置,每條消息TTL可以不同。

如果上述兩種方法同時使用,則消息的過期時間以兩者之間TTL較小的那個數值為準。消息在隊列的生存時間一旦超過設置的TTL值,就稱為dead message被投遞到死信隊列, 消費者將無法再收到該消息。

1. 設置隊列TTL

配置resources\spring\spring-rabbitmq.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:rabbit="http://www.springframework.org/schema/rabbit"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/rabbit http://www.springframework.org/schema/rabbit/spring-rabbit.xsd">

    <!--定義過期隊列及其屬性,不存在則自動創建-->
    <rabbit:queue id="my_ttl_queue" name="my_ttl_queue" auto-declare="true">
        <rabbit:queue-arguments>
            <!--投遞到該隊列的消息如果沒有消費都將在6秒之後被刪除-->
            <entry key="x-message-ttl" value-type="long" value="6000"/>
        </rabbit:queue-arguments>
    </rabbit:queue>
<rabbit:connection-factory id="connectionFactory" host="192.168.75.163"
port="5672"
username="test01"
password="test01"
virtual-host="/hello"

/>
</beans>

參數 x-message-ttl 的值 必須是非負 32 位整數 (0 <= n <= 2^32-1) ,以毫秒為單位表示 TTL 的值。這樣,值 6000 表示存在於 隊列 中的當前 消息 將最多只存活 6 秒鐘

如果不設置TTL,則表示此消息不會過期。如果將TTL設置為0,則表示除非此時可以直接將消息投遞到消費者,否則該消息會被立即丟棄。

 

然後在測試類中編寫如下方法發送消息到上述定義的隊列:

@RunWith(SpringRunner.class)
@SpringBootTest
public class ProducerTest {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    /**
     * 過期隊列消息
     * 投遞到該隊列的消息如果沒有消費都將在6秒之後被刪除
     */
    @Test
    public void ttlQueueTest(){
        //路由鍵與隊列同名
        rabbitTemplate.convertAndSend("my_ttl_queue", "發送到過期隊列my_ttl_queue,6秒內不消費則不能再被消費。");
    }

}

啟動類中導入配置文件

//導入配置文件
@ImportResource("classpath:/spring/spring-rabbitmq.xml")
@SpringBootApplication
public class ProducerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ProducerApplication.class, args);
    }

}

執行單元測試,看結果

 

 

 6秒后,再看結果

 

 

 

2. 設置消息TTL

消息的過期時間;只需要在發送消息(可以發送到任何隊列,不管該隊列是否屬於某個交換機)的時候設置過期時間即可。

在測試類中編寫如下方法發送消息並設置過期時間到隊列:

/**
     * 過期消息
     * 該消息投遞任何交換機或隊列中的時候;如果到了過期時間則將從該隊列中刪除
     */
    @Test
    public void ttlMessageTest(){
        MessageProperties messageProperties = new MessageProperties();
        //設置消息的過期時間,3秒
        messageProperties.setExpiration("3000");
        Message message = new Message("測試過期消息,3秒鐘過期".getBytes(), messageProperties);
        //路由鍵與隊列同名
        rabbitTemplate.convertAndSend("my_ttl_queue", message);
    }

expiration 字段以微秒為單位表示 TTL 值。且與 x-message-ttl 具有相同的約束條件。因為 expiration 字段必須為字符串類型,broker 將只會接受以字符串形式表達的数字。

當同時指定了 queue 和 message 的 TTL 值,則兩者中較小的那個才會起作用。

 

死信隊列

DLX,全稱為Dead-Letter-Exchange , 可以稱之為死信交換機,也有人稱之為死信郵箱。

當消息在一個隊列中變成死信(dead message)之後,它能被重新發送到另一個交換機中,這個交換機就是DLX ,綁定DLX的隊列就稱之為死信隊列。

消息變成死信,可能是由於以下的原因:

  • 消息被拒絕
  • 消息過期
  • 隊列達到最大長度

DLX也是一個正常的交換機,和一般的交換機沒有區別,它能在任何的隊列上被指定,實際上就是設置某一個隊列的屬性。

當這個隊列中存在死信時,Rabbitmq就會自動地將這個消息重新發布到設置的DLX上去,進而被路由到另一個隊列,即死信隊列。

要想使用死信隊列,只需要在定義隊列的時候設置隊列參數 x-dead-letter-exchange 指定交換機即可。

 

 

具體步驟如下

1. 定義死信交換機

<!--定義定向交換機中的持久化死信隊列,不存在則自動創建-->
<rabbit:queue id="my_dlx_queue" name="my_dlx_queue" auto-declare="true"/>

<!--定義廣播類型交換機;並綁定上述隊列-->
<rabbit:direct-exchange id="my_dlx_exchange" name="my_dlx_exchange" auto-declare="true">
<rabbit:bindings>
<!--綁定路由鍵my_ttl_dlx、my_max_dlx,可以將過期的消息轉移到my_dlx_queue隊列-->
<rabbit:binding key="my_ttl_dlx" queue="my_dlx_queue"/>
<rabbit:binding key="my_max_dlx" queue="my_dlx_queue"/>
</rabbit:bindings>
</rabbit:direct-exchange>

2. 隊列設置死信交換機

<!--定義過期隊列及其屬性,不存在則自動創建-->
<rabbit:queue id="my_ttl_dlx_queue" name="my_ttl_dlx_queue" auto-declare="true">
<rabbit:queue-arguments>
<!--投遞到該隊列的消息如果沒有消費都將在6秒之後被投遞到死信交換機-->
<entry key="x-message-ttl" value-type="long" value="6000"/>
<!--設置當消息過期后投遞到對應的死信交換機-->
<entry key="x-dead-letter-exchange" value="my_dlx_exchange"/>
</rabbit:queue-arguments>
</rabbit:queue>

<!--定義限制長度的隊列及其屬性,不存在則自動創建-->
<rabbit:queue id="my_max_dlx_queue" name="my_max_dlx_queue" auto-declare="true">
<rabbit:queue-arguments>
<!--投遞到該隊列的消息最多2個消息,如果超過則最早的消息被刪除投遞到死信交換機-->
<entry key="x-max-length" value-type="long" value="2"/>
<!--設置當消息過期后投遞到對應的死信交換機-->
<entry key="x-dead-letter-exchange" value="my_dlx_exchange"/>
</rabbit:queue-arguments>
</rabbit:queue>

<!--定義定向交換機 根據不同的路由key投遞消息-->
<rabbit:direct-exchange id="my_normal_exchange" name="my_normal_exchange" auto-declare="true">
<rabbit:bindings>
<rabbit:binding key="my_ttl_dlx" queue="my_ttl_dlx_queue"/>
<rabbit:binding key="my_max_dlx" queue="my_max_dlx_queue"/>
</rabbit:bindings>
</rabbit:direct-exchange>

3. 消息過期的死信隊列測試

/**
     * 過期消息投遞到死信隊列
     * 投遞到一個正常的隊列,但是該隊列有設置過期時間,到過期時間之後消息會被投遞到死信交換機(隊列)
     */
    @Test
    public void dlxTTLMessageTest(){
        rabbitTemplate.convertAndSend(
                "my_normal_exchange",
                "my_ttl_dlx",
                "測試過期消息;6秒過期後會被投遞到死信交換機2222");
    }

運行看結果

 

 6秒后

 

 

4. 消息溢出的死信隊列測試

/**
     * 消息長度超過2,會投遞到死信隊列中
     */
    @Test
    public void dlxMaxMessageTest(){
        rabbitTemplate.convertAndSend(
                "my_normal_exchange",
                "my_max_dlx",
                "發送消息4:消息長度超過2,會被投遞到死信隊列中!");

        rabbitTemplate.convertAndSend(
                "my_normal_exchange",
                "my_max_dlx",
                "發送消息5:消息長度超過2,會被投遞到死信隊列中!");

        rabbitTemplate.convertAndSend(
                "my_normal_exchange",
                "my_max_dlx",
                "發送消息6:消息長度超過2,會被投遞到死信隊列中!");
        
    }

運行,看結果

 

 

 

 上面發送的3條消息中的第1條消息會被投遞到死信隊列中

 

延遲隊列

延遲隊列存儲的對象是對應的延遲消息;所謂“延遲消息” 是指當消息被發送以後,並不想讓消費者立刻拿到消息,而是等待特定時間后,消費者才能拿到這個消息進行消費。

在RabbitMQ中延遲隊列可以通過 過期時間 + 死信隊列 來實現

 

 

延遲隊列的應用場景;如:

  • 在電商項目中的支付場景;如果在用戶下單之後的幾十分鐘內沒有支付成功;那麼這個支付的訂單算是支付失敗,要進行支付失敗的異常處理(將庫存加回去),這時候可以通過使用延遲隊列來處理
  • 在系統中如有需要在指定的某個時間之後執行的任務都可以通過延遲隊列處理

具體代碼不演示了

 

消息確認機制

確認並且保證消息被送達,提供了兩種方式:發布確認和事務。(兩者不可同時使用)在channel為事務時,不可引入確認模式;同樣channel為確認模式下,不可使用事務。

1 發布確認

消息發送成功確認

connectionFactory 中啟用消息確認:

<rabbit:connection-factory id="connectionFactory" host="192.168.75.163"
                               port="5672"
                               username="test01"
                               password="test01"
                               virtual-host="/hello"
                               publisher-confirms="true"
    />

配置消息確認回調方法如下:

<!-- 消息回調處理類 -->
<bean id="confirmCallback" class="com.itheima.rabbitmq.MsgSendConfirmCallBack"/>
<!--定義rabbitTemplate對象操作可以在代碼中方便發送消息-->
<!-- confirm-callback="confirmCallback" 表示:消息失敗回調 -->
<rabbit:template id="rabbitTemplate" connection-factory="connectionFactory" 
        confirm-callback="confirmCallback"/>

消息確認回調方法如下:

public class MsgSendConfirmCallBack implements RabbitTemplate.ConfirmCallback {
    public void confirm(CorrelationData correlationData, boolean ack, String cause) {
        if (ack) {
            System.out.println("消息確認成功....");
        } else {
            //處理丟失的消息
            System.out.println("消息確認失敗," + cause);
        }
    }
}

我們手動建一個spring_queue隊列.並測試如下:

 @Test
    public void queueTest(){
        //路由鍵與隊列同名
        rabbitTemplate.convertAndSend("spring_queue", "只發隊列spring_queue的消息。");
    }

查看結果

 

 

 

 消息發送失敗回調

connectionFactory 中啟用回調:

!-- publisher-returns="true" 表示:啟用了失敗回調 -->
<rabbit:connection-factory id="connectionFactory" host="${rabbitmq.host}"
        port="${rabbitmq.port}"
        username="${rabbitmq.username}"
        password="${rabbitmq.password}"
        virtual-host="${rabbitmq.virtual-host}"
        publisher-returns="true" />

配置消息失敗回調方法如下:

<!-- 消息失敗回調類 -->
<bean id="sendReturnCallback" class="com.itheima.rabbitmq.MsgSendReturnCallback"/>
<!-- return-callback="sendReturnCallback" 表示:消息失敗回調 ,同時需配置mandatory="true",否則消息則丟失-->
<rabbit:template id="rabbitTemplate" connection-factory="connectionFactory"
        confirm-callback="confirmCallback" return-callback="sendReturnCallback" 
        mandatory="true"/>

注意:同時需配置mandatory=”true”,否則消息則丟失

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

透過選單樣式的調整、圖片的縮放比例、文字的放大及段落的排版對應來給使用者最佳的瀏覽體驗,所以不用擔心有手機版網站兩個後台的問題,而視覺效果也是透過我們前端設計師優秀的空間比例設計,不會因為畫面變大變小而影響到整體視覺的美感。

 

消息失敗回調方法如下:

public class MsgSendReturnCallback implements RabbitTemplate.ReturnCallback {
    public void returnedMessage(Message message, int i, String s, String s1, String s2) {
        String msgJson  = new String(message.getBody());
        System.out.println("Returned Message:"+msgJson);
    }
}

模擬消息發送失敗,功能測試如下:

@Test
public void testFailQueueTest() throws InterruptedException {
    //exchange 正確,queue 錯誤 ,confirm被回調, ack=true; return被回調 replyText:NO_ROUTE
    amqpTemplate.convertAndSend("test_fail_exchange", "", "測試消息發送失敗進行確認應答。");
}

失敗回調結果如下:

 

 

事務支持

場景:業務處理伴隨消息的發送,業務處理失敗(事務回滾)后要求消息不發送。rabbitmq 使用調用者的外部事務,通常是首選,因為它是非侵入性的(低耦合)。

外部事務的配置

<rabbit:template id="rabbitTemplate"
                     connection-factory="connectionFactory"

                     mandatory="true"
                     channel-transacted="true"
    />

    <!--平台事務管理器-->
    <bean id="transactionManager" class="org.springframework.amqp.rabbit.transaction.RabbitTransactionManager">
        <property name="connectionFactory" ref="connectionFactory"/>
    </bean>

測試類或者測試方法上加入@Transactional註解

   @Test
    @Transactional //開啟事務
    //@Rollback(false)//在測試的時候,需要手動的方式制定回滾的策略
    public void queueTest2(){
        //路由鍵與隊列同名
        rabbitTemplate.convertAndSend("spring_queue", "只發隊列spring_queue的消息--02222222222222222222。");
        System.out.println("----------------dosoming:可以是數據庫的操作,也可以是其他業務類型的操作---------------");
        //模擬業務處理失敗
        //System.out.println(1/0);
        rabbitTemplate.convertAndSend("spring_queue", "只發隊列spring_queue的消息--02。");
    }

運行看結果

 

 

 

 

 

 因為是測試類,所以spring自動回滾了,需要我們手動禁止回滾

   @Test
    @Transactional //開啟事務
    @Rollback(false)//在測試的時候,需要手動的方式制定回滾的策略
    public void queueTest2(){
        //路由鍵與隊列同名
        rabbitTemplate.convertAndSend("spring_queue", "只發隊列spring_queue的消息--02222222222222222222。");
        System.out.println("----------------dosoming:可以是數據庫的操作,也可以是其他業務類型的操作---------------");
        //模擬業務處理失敗
        //System.out.println(1/0);
        rabbitTemplate.convertAndSend("spring_queue", "只發隊列spring_queue的消息--02。");
    }

再執行一次測試類,查看結果

 

 

 我們手動弄個異常,再試一次

  @Test
    @Transactional //開啟事務
    @Rollback(false)//在測試的時候,需要手動的方式制定回滾的策略
    public void queueTest2(){
        //路由鍵與隊列同名
        rabbitTemplate.convertAndSend("spring_queue", "只發隊列spring_queue的消息--02222222222222222222。");
        System.out.println("----------------dosoming:可以是數據庫的操作,也可以是其他業務類型的操作---------------");
        //模擬業務處理失敗
        System.out.println(1/0);
        rabbitTemplate.convertAndSend("spring_queue", "只發隊列spring_queue的消息--02。");
    }

看結果

 

 

 這裏4條是因為我手動禁止了回滾

結果應該是沒問題的,就不測試了

 

消息追蹤

1.消息追蹤啟用與查看

消息中心的消息追蹤需要使用Trace實現,Trace是Rabbitmq用於記錄每一次發送的消息,方便使用Rabbitmq的開發者調試、排錯。可通過插件形式提供可視化界面。

Trace啟動後會自動創建系統Exchange:amq.rabbitmq.trace ,每個隊列會自動綁定該Exchange,綁定后發送到隊列的消息都會記錄到Trace日誌。

 

查看插件列表

rabbitmq-plugins list

 

 

 

 

rabbitmq啟用trace插件

rabbitmq-plugins enable rabbitmq_tracing

命令集 描述
rabbitmq-plugins list 查看插件列表
rabbitmq-plugins enable rabbitmq_tracing rabbitmq啟用trace插件
rabbitmqctl trace_on 打開trace的開關
rabbitmqctl trace_on -p test01 打開trace的開關(itcast為需要日誌追蹤的vhost)
rabbitmqctl trace_off 關閉trace的開關
rabbitmq-plugins disable rabbitmq_tracing rabbitmq關閉Trace插件
rabbitmqctl set_user_tags test01 administrator 只有administrator的角色才能查看日誌界面

 

 

 

 

 

 

 

 

 

 

 安裝插件並開啟 trace_on 之後,會發現多個 exchange:amq.rabbitmq.trace ,類型為:topic。

 

 

2 日誌追蹤

首先重新登錄管理控制台

 

 

第一步:發送消息

@Test
    public void queueTest3() throws InterruptedException {
        rabbitTemplate.convertAndSend("spring_queue", "只發隊列spring_queue的消息--01。");
    }

 

 第二步:查看trace

第三步:點擊Tracing查看Trace log files

 

 

第四步:點擊itest-log.log確認消息軌跡正確性

 

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

搬家費用:依消費者運送距離、搬運樓層、有無電梯、步行距離、特殊地形、超重物品等計價因素後,評估每車次單

宏光都要靠邊站!這輛不燒油載人運貨全能的車型有多diao?_網頁設計公司

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

網站的第一印象網頁設計,決定了客戶是否繼續瀏覽的意願。台北網動廣告製作的RWD網頁設計,採用精簡與質感的CSS語法,提升企業的專業形象與簡約舒適的瀏覽體驗,讓瀏覽者第一眼就愛上它。

這台由日本Micro Commuter豐島屋設計,並以本田旗下MC-β為基礎的小車,所有外觀鈑金件包括前後保險杠甚至後面的貨箱都是經過3D打印的結果,這台小車長寬高分別是2495mm/1280mm/1545mm這麼看很像一台Kcar水準。整車重量僅600公斤,正常模式下有70公里/小時,極速可達80公里/小時。

想買代步車很糾結?覺得加油很貴?沒有一台自己喜歡的代步小車?以下這台小車解決你所有問題:

來自本田最新的3D打印汽車,

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

台中景泰電動車行只是一個單純的理由,將來台灣的環境,出門可以自由放心的深呼吸,讓空氣回歸自然的乾淨,減少污染,留給我們下一代有好品質無空污的優質環境

除了外殼之外提供了全套動力總成,還能自己用3D打印機把喜歡的外殼打印出來自己裝上去使用!

這台由日本Micro Commuter豐島屋設計,並以本田旗下MC-β為基礎的小車,所有外觀鈑金件包括前後保險杠甚至後面的貨箱都是經過3D打印的結果,這台小車長寬高分別是2495mm/1280mm/1545mm這麼看很像一台Kcar水準。整車重量僅600公斤,正常模式下有70公里/小時,極速可達80公里/小時。雖然並不知道續航時間如何,但以220伏充電能在3小時內充滿。希望這種小車能儘快出現在大街小巷代替送快遞的電瓶車。

本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

以設計的實用美學觀點,規劃出舒適、美觀的視覺畫面,有效提昇使用者的心理期待,營造出輕鬆、愉悅的網站瀏覽體驗。

百公里油耗僅需4-6.5L!13-25萬最省油的車型有哪些?_台北網頁設計

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

擁有後台管理系統的網站,將擁有強大的資料管理與更新功能,幫助您隨時新增網站的內容並節省網站開發的成本。

混動車型只有兩款車型,價格也比較貴,26萬和33萬,混動車型頂配和低配多了不少東西,例如一些電動的設備,自動泊車,併線輔助,車道偏離等等,但是價格上多了7萬,如果要買凱美瑞的話,不推薦頂配,因為日常使用和平時商務用途的話,低配就夠了。

說到省油,說到節能減排,當然,純電動汽車是可以很理想化的做到這一點,但是,就目前而言,純電動汽車方便性不太夠,不說別的,就說充電吧,不要說普及了,找個充電樁都難,所以,目前能做到省油,節能減排較為的理想化的只有混動車。

廣汽豐田-雷凌雙擎

相比普通版的雷凌,雷凌雙擎的外觀更加激進,應該說,帶了點前衛的設計感,並且兩撇“小鬍子”辨識度較高。內飾較為簡潔,藍色檔桿很有特色,但是個人覺得就是太小了,按鍵排列較為規整,操作方便,質感一般,比普通版稍微好一些。

全系的配置較為平均,低配的舒適性配置少一些,頂配和次頂配的配置較高,但是價格也去到了14.15萬,可惜的是,雙擎所有的車型都沒有倒車雷達,畢竟在這個價位上,倒車雷達也很常見了。空間中上,小家庭使用比較足夠,滿員情況下稍微有些擠。

廣汽豐田-凱美瑞

相比老款,2016款凱美瑞的外觀造型比較年輕了一些,但是個人覺得,沒有老款的好看,畢竟作為一輛中級車,還是穩重的外觀比較適合。內飾採用對稱式的布局,

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

擁有後台管理系統的網站,將擁有強大的資料管理與更新功能,幫助您隨時新增網站的內容並節省網站開發的成本。

整體比較簡約,按鍵基本排列在中控屏的下方,質感在20多萬的車型當中不算好,這是短板之一,簡單說,不夠檔次。

混動車型只有兩款車型,價格也比較貴,26萬和33萬,混動車型頂配和低配多了不少東西,例如一些電動的設備,自動泊車,併線輔助,車道偏離等等,但是價格上多了7萬,如果要買凱美瑞的話,不推薦頂配,因為日常使用和平時商務用途的話,低配就夠了。空間較大,滿員情況下還是比較舒適的。

雷克薩斯-雷克薩斯CT200h

CT200h低矮的車身讓它看起來很有運動感,在加上雷克薩斯的家族“大嘴”也顯得更加特色,但CT200h還沒有改款,並沒有像現在其他雷克薩斯車型那樣比較激進,還是帶了些穩重的氣息。CT200h內飾同樣以簡潔為主,同樣的檔桿的設計也有很特色,雖然還是感覺太小,質感對比同價較好一些,畢竟作為一個豪華品牌。

CT200h全系都是混動車型,配置上,中低配的車型舒適性的配置稍微少一些,例如沒有,電動天窗,倒車影像,駐車雷達等等,另外,沒有配備中控屏實在是掉檔次。而中高配配置稍微好一些,雖然配置是齊全一些,但是價格去到30萬,相比其他車型就顯得有些“素”了。空間一般,小家庭使用比較足夠。

總結:純電動車的盛行估計還得一段時間,而目前來講,混動車型才是節能減排的主流,雖然混動車型的配置都不算好,但要知道的是,它有個混動的標誌,在油費上也剩下不少錢。不過,混動車型還是不算多,價格相對比較貴,如果要考慮混動,還是比較建議,雷凌雙擎或者卡羅拉雙擎,在價格和配置上也比較適合普遍的家庭。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

擁有後台管理系統的網站,將擁有強大的資料管理與更新功能,幫助您隨時新增網站的內容並節省網站開發的成本。

6、7萬絕對要多看看這些非常實用的合資車!省油又耐用_網頁設計公司

※想知道最厲害的網頁設計公司嚨底家"!

RWD(響應式網頁設計)是透過瀏覽器的解析度來判斷要給使用者看到的樣貌

4L自動擋在滿載的時候感到比較乏力。4AT變速箱在緩慢加速的時候幾乎沒有頓挫感,但是急加速或者踩油門爬坡的時候就可以感到頓挫了。不過因為1。6L車型價格較貴,所以大家幾乎都是選擇1。4L車型。K2的後排空間表現很好,油耗也比較低。

裸車六七萬可以買到配置很高的自主轎車,但是還有不少人對自主不放心,所以更多的還是考慮合資轎車,所以今天就給大家推薦幾款價格便宜,但是卻非常實用的合資轎車。

長安鈴木-雨燕

雨燕的車身尺寸為3765*1690*1510mm,軸距為2390mm,定位為小型兩廂車,說實話,這尺寸確實有點小了,不過雨燕的定位屬於小巧可愛類型的,看起來比較呆萌,所以你可以看到很多女士在使用它。

雨燕的的動力系統為1.3L 91馬力+5擋手動,1.5L 103馬力+5擋手動/4擋自動。

雖然雨燕的車身看起來很小,但是車內空間卻會給你驚喜,無論是頭部空間還是後排的腿部空間,表現都很不錯。雨燕的方向盤稍微有那麼一點重,但是操控在同級別還算是比較好的,尤其是1.5L車型,只要捨得給油,動力絕對是嗖嗖的,這也是推薦雨燕的原因,車子小,但是動力挺足,提速快,超車也是比較簡單的事情,畢竟鈴木的發動機還是還很不錯的。最後補充一句,雨燕還是買手動擋吧,誰用誰知道。

東風悅達起亞-起亞K2

K2兩廂車的車身尺寸為4128*1700*1460mm,三廂版的為4378*1700*1460mm,無論是兩廂車還是三廂車,

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

透過資料庫的網站架設建置,建立公司的形象或購物系統,並提供最人性化的使用介面,讓使用者能即時接收到相關的資訊

K2都是充滿着設計感,韓國車一直在外形設計上有着自己特色,雖然K2定位小型車,車子比較小,但是看起來卻並不顯得太小氣,只會給人很時尚嬌小的感覺。

K2和瑞納算是同門師兄弟。兩個車子基本就是換了個車標,本質上是一模一樣的,就銷量來看,起亞K2的1-9月份銷量為94034輛,瑞納為99290輛,銷量也是旗鼓相當,有不少消費者糾結K2和瑞納怎麼選擇,其實很簡單,因為本質一樣的,所以就是哪個優惠大選擇哪一個。

K2的動力系統為1.4L 107馬力+5擋手動/4擋自動,1.6L 123馬力+4擋自動。如果購買1.4L車型,那麼盡量選擇手動擋,因為1.4L自動擋在滿載的時候感到比較乏力。4AT變速箱在緩慢加速的時候幾乎沒有頓挫感,但是急加速或者踩油門爬坡的時候就可以感到頓挫了。不過因為1.6L車型價格較貴,所以大家幾乎都是選擇1.4L車型。

K2的後排空間表現很好,油耗也比較低。缺點就是配置低,噪音大等,這是這一級別車子的通病。

上汽通用雪弗蘭-賽歐

賽歐的車身尺寸4300*1735*1504mm,軸距為2500mm,和上面兩位一樣,同樣屬於小型車,因為這個價位想買合資車,幾乎只能選擇小型車。不過好在今天推薦的這讓三款車雖然尺寸不大但是車內空間還是挺足的。滿足日常家用還是沒有有問題的。

賽歐的動力系統為1.3L 103馬力/1.5L 113馬力+5擋手動/5擋AMT變速箱。賽歐雖然是美系車,但是賽歐真的是出了名的省油,1.5L手動擋的百公里油耗為6.3L左右,至於AMT車型,如果沒有特別需求還是買手動擋吧!因為這些所謂的半自動擋其實不是特別好用。同時小賽歐動力也比較足,質量也是很好,好基友買了賽歐之後整天是各種誇他的車子,覺得賽歐是一款好用的家用車。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

當全世界的人們隨著網路時代而改變向上時您還停留在『網站美醜不重要』的舊有思維嗎?機會是留給努力改變現況的人們,別再浪費一分一秒可以接觸商機的寶貴時間!

這款2.0L全新SUV氣場堪比寶馬X6!上市后13萬內就賣瘋_包裝設計

南投搬家公司費用需注意的眉眉角角,別等搬了再說!

上新台中搬家公司提供您一套專業有效率且人性化的辦公室搬遷、公司行號搬家及工廠遷廠的搬家服務

不過遺憾的是T90並沒有配備群眾們喜聞樂見的全景天窗,只是尺寸也不算很大的普通天窗。乘坐空間這一點對於國內消費者來說就是重中之重了,國人就是喜歡大尺寸、大空間,畢竟拖家帶口空間小了坐着確實憋屈。T90的座椅使用了和天籟同級的人體工程學座椅,座椅填充物柔軟,舒適性和包裹性都非常好,絕對也能稱得上是移動大沙發。

前段時間小編去體驗了一把國產版寶馬X6-啟辰T90,之所以說是X6,是因為在外形上,T90和X6看起來確實比較像。T90定位中型轎跑型SUV,上市之後將會成為啟辰的旗艦車型。預售價將會在廣州車展上公布。

由於是中型SUV,所以T90的尺寸自然不會小,長寬高為4793*1865*1592mm,軸距為2765mm,個頭算是挺大的了。因為是溜背的造型,再加上較長的車身,所以側面來看T90顯得很修長,同時空載的時候最小離地間隙為194mm,通過性還是不錯的。不過最吸引人的是廠家宣稱T90是啟辰“風雕美學”設計理念的第一款車型,整車原創度非常高,同時別緻的前進氣格柵也使T90讓人眼前一亮。

到了車內,大家會發現T90的原創度會更高了,內飾不管是做工還是用料,都是十分的用心。新車的氣味較小,可見內飾選材還是比較嚴格的。同時配置又很高,尤其是中控那個高達12.3英寸的大屏幕,絕對很奪人眼球,同時它的分辨率高達1920*768,畫面清晰,運行流暢,

※產品缺大量曝光嗎?你需要的是一流包裝設計!

窩窩觸角包含自媒體、自有平台及其他國家營銷業務等,多角化經營並具有國際觀的永續理念。

沒有遇到卡頓的情況。同時它還可以分屏显示,左側小屏幕显示菜單功能,不會影響右側屏幕的显示。配備百度CarLife系統,這是啟辰和百度合作開發的,可以鏈接安卓和蘋果手機,功能豐富。

不單中控做的好,內飾用料也很不錯。進入車內凡是手可以碰到的地方全部是使用了軟性材料,比如中控面板,扶手箱,門把手等,所以幾乎你在車內是感覺不到廉價感覺的。不過遺憾的是T90並沒有配備群眾們喜聞樂見的全景天窗,只是尺寸也不算很大的普通天窗。

乘坐空間這一點對於國內消費者來說就是重中之重了,國人就是喜歡大尺寸、大空間,畢竟拖家帶口空間小了坐着確實憋屈。T90的座椅使用了和天籟同級的人體工程學座椅,座椅填充物柔軟,舒適性和包裹性都非常好,絕對也能稱得上是移動大沙發。後排空間較大,但是溜背的造型會犧牲一定的頭部空間。

動力系統應該是T90最拿得出手的東西了。T90配備日產MR20自然吸氣發動機,排量為2.0L,最大功率144馬力,最大扭矩198牛·米,匹配CVT無級變速箱。這套動力系統同時也在天籟和逍客上面使用,所以T90的動力系統應該是很讓人放心了。畢竟這是一套成熟、可靠、穩定、經濟的動力系統。

T90馬上就會成為啟辰的旗艦轎車,所以啟辰方面也是特別重視的,從整車的做工來看也能看出來廠家確實是在用心做產品。後期我們還會有T90的試駕文章,喜歡它的消費者可以留意一下。

儘管T90會在即將到來的廣州車展公布預售價,但是官方曾說,這款車的預售價在20萬以下,聽到這價格我就心涼了半截,只是覺得,好貴…到時候價格真的是接近20萬了,那估計銷量真的堪比寶馬X6了。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

網動廣告出品的網頁設計,採用精簡與質感的CSS語法,提升企業的專業形象與簡約舒適的瀏覽體驗,讓瀏覽者第一眼就愛上她。

豪華車都未必有的高逼格配置,這些十幾萬的車竟然配了!_台中搬家

台中搬家遵守搬運三大原則,讓您的家具不再被破壞!

台中搬家公司推薦超過30年經驗,首選台中大展搬家

8T車型為例,最大馬力為163ps,最大扭矩250Nm,與之搭配的是成熟的6AT變速箱。日常使用中,博瑞的油門反饋比較輕鬆有力,動力沒有過多的猶豫,更多地呈現出線性般的動態效果,駕駛風格沉穩厚重。即便是在連續碾過減速帶時,底盤依然能展現出很高級的濾震效果,乘坐舒適度不錯。

前言

HUD抬頭显示系統,相信大家都並不陌生,這項技術曾經被廣泛應用到戰鬥機上。從原理上可以得知,HUD是通過光學原理投射到擋風玻璃上,用來显示車輛的各種行車信息。用戶不再需要低頭反覆的查看儀錶盤,從而避免影響注意力的分散,使得用戶能夠更加專註地觀察前方路況,特別是在夜晚或者高速情況下,HUD抬頭显示對於提升行車安全性有着非常高的實際價值。

當然,在很多消費者眼中,HUD抬頭显示一度認為是豪華車才該有的標籤,而搭載如此高大上配置的車型,少說也得四、五十萬吧。事實上,隨着技術變革和競爭加劇,如今不少的家用車也紛紛將其作為安全配置中的金字招牌,十幾萬出頭就能享受到高逼格又實用的抬頭显示系統。

昂克賽拉當初一經亮相,動感驚艷的外形重新吸引了眾多忠實用戶,馬自達也憑此聚焦了高度的關注度。而最新一代的昂克賽拉得益於“魂動”理念的加持,車身造型如同獵豹般奔跑姿態,着實是令人“魂牽夢繞”。雖然昂克賽拉已經上市有一段時間,但其外觀始終百看不厭,兩廂三廂各有特色,兼具個性與時尚,顏值高度走在同級車的前沿。

昂克賽拉的內飾一樣充滿驚喜,設計路線仍以簡潔為主,內飾採用了碳纖維材質,再配上炮筒式中置儀錶盤,凸顯了整個車廂滿滿的運動風格,狠狠的激發了用戶的駕控慾望。無論是三廂版還是兩廂版均配有抬頭显示,不過只有頂配才配有,視覺體驗一目瞭然,給到駕駛者更充足的操控自信。另外,值得肯定的是昂克賽拉全系都標配了ESp等安全主動配置。但作為運動定位的昂克賽拉,整體空間都要遜色於其它主流家用車,或許這正是馬自達特立獨行的代價吧。

即然說到馬自達,那麼無論如何也繞不開其先進的創馳藍天技術。昂克賽拉提供兩款1.5L和2.0L自吸發動機,其中1.5L排量車型的最大馬力為117ps,最大扭矩148Nm,匹配的是6MT和6AT變速箱。憑藉自身出色的匹配調校,動力的輸出線性平順,與6AT變速箱節奏一致、恰好火候,幾乎感覺不到任何的換擋動作,同時為了滿足用戶不同的操控需求,還提供了手動變速箱與換擋撥片的選擇,駕駛樂趣十足。

國產車也有抬頭显示功能?沒錯,就在這台號稱“最美中級車”的吉利博瑞身上。誠然,國產車的高配置、大空間已經成為不少自主車企慣用的招式。但平心而論,博瑞的綜合實力還是不錯的。外觀方面運用了最新家族化設計元素,並融入了中國傳統文化理念,在保持高大上的車身形象又帶有親切感,整車的辨識度非常高。

博瑞內飾似乎也挑不出毛病,中控台上採用了軟質材料,質感、手感一流。車內線條的細膩處理也能看得出設計師花費了不少時間在構造,造型層次感十足,包括工藝水準也達到一個新台階。高配置、大空間自然是博瑞分內之事,抬頭显示功能具備自動感光調節,非常人性化,

台中搬家公司費用怎麼算?

擁有20年純熟搬遷經驗,提供免費估價且流程透明更是5星評價的搬家公司

而且支持多信息显示,提升了內飾的檔次感和操控的便利性。

以配有HUD的1.8T車型為例,最大馬力為163ps,最大扭矩250Nm,與之搭配的是成熟的6AT變速箱。日常使用中,博瑞的油門反饋比較輕鬆有力,動力沒有過多的猶豫,更多地呈現出線性般的動態效果,駕駛風格沉穩厚重。即便是在連續碾過減速帶時,底盤依然能展現出很高級的濾震效果,乘坐舒適度不錯。

對於法系車,總是對其持有一種特殊的情感。而作為東風標緻的旗艦車型標緻508,改款之後同樣延續了法系車特有的浪漫與不羈,相比之前卻更接地氣,更符合國人的審美口味。外觀風格穩重大氣,特別是針對其前臉部分進行了一番大刀闊斧,鍍鉻圍繞下的格珊條,通過分體式的設計營造出不錯的層次感,線條硬朗又不失圓潤,配合犀利的LED大燈,簡直是讓人眼前一亮。

至於內飾設計,則相對平庸。但好在車廂的做工用料處理得不錯,不惜採用大量的軟材質包裹,這點非常迎合國人的喜好。只是在人體工程學上,法國工程師還是一如既往的固執,操作起來與用戶習慣非常衝突。但是,抬頭显示的功能性還是值得一提,擋風玻璃上的轉速、時速的信息完善度較好,显示效果也比較出色。標緻508配置可謂相當厚道,完全在同級主流之上。

此次標緻508改款,最大的變化要數動力的升級,新增了一台1.8THp發動機,最大馬力204ps,最大扭矩280Nm,動力數據確實可圈可點。實際駕駛過程中,標緻508表現也印證了的推測,在低速區間的動力響應最為积極,動力能夠保持高效的連貫性。6AT變速箱的調校也足夠聰明,底盤懸挂的表現穩重踏實,而且舒適度相當不錯。

與同門兄弟雅閣不同,思鉑睿的產品風格以運動為最大賣點。前臉繼承了最新的家族化臉譜設計,同時誇張的鍍鉻裝飾條激進前衛,全LED大燈的點綴,視覺上富有衝擊力。與前臉相呼應的還有尾部設計,辨識度很高的豎形LED尾燈,雙邊雙出的排氣管布局,搭配出很強烈的設計美感,十分吸睛耐看。

內飾方面則採用本田一貫的設計格調,中控台明顯偏向於駕駛員一側,非對稱的造型充斥着活力的運動氛圍。內飾材質使用了搪塑工藝處理,手感、工藝尚能接受。抬頭显示的效果比較出色,導航、時速、限速等重要行車信息一應俱全,畢竟都達到了20多萬的價位,其餘配置情況則只能說一般般。

思鉑睿全系提供了兩種不同的動力規格,而2.4L地球夢自吸發動機匹配一台8速雙離合變速箱,最大馬力和最大扭矩分別為208ps和247Nm。動力的調校符合運動定位,無論是動力爆發還是換擋快感,思鉑睿都做到了游刃有餘,絲毫沒有一秒的遲疑。紮實硬朗的底盤,可以給到駕駛者一種暢快淋漓的操控體驗,但隔音和濾震依然是本田的一大通病。

總結:綜合這四款車比較下來,昂科賽拉與博瑞的性價比較高,各方面的表現較為滿意,十幾萬就能購入帶抬頭显示功能的車型,應該更值得用戶入手。而標誌508和思鉑睿則由於是合資中級車的身份,價位相對更高一級,但在同級中均有不錯的口碑,也是同價位少有的配置車型。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

台中搬家公司費用怎麼算?

擁有20年純熟搬遷經驗,提供免費估價且流程透明更是5星評價的搬家公司

拿20萬買車不容易!選對車能有豪華SUV的檔次感!_台中搬家公司

※推薦台中搬家公司優質服務,可到府估價

台中搬鋼琴,台中金庫搬運,中部廢棄物處理,南投縣搬家公司,好幫手搬家,西屯區搬家

這並非是別克自嗨地定個高價錢,而是旗下的產品確實是有一定的豪華調性,譬如如今排在合資SUV銷量榜首上第一位的昂科威。打開昂科威的車門,第一時間定住眼睛的,除了那個包圍感十足的飛翼式中控台以外,就數那些面積巨大的棕色皮革面料。

如今的汽車早已經不是過去達官貴人們才消費得起的商品,對於許多的人來說,花個一年或者兩年的積蓄買一輛車是一件再平常不過的事情。所以,汽車對於彰顯車主身份的作用(通俗來說就是裝逼)已經大不如前。但即便如此,我依然認為同樣的價錢,買到一輛逼格更高的SUV是一件讓人相當愉快的事情,這跟裝逼沒關係(嘴上說說而已),僅僅是滿足了我們對生活品質的追求。今天,我們就來了解一些只需要十來二十萬售價,卻有着40、50萬逼格的SUV車型。

廠商指導價:9.98-18.68萬

作為上汽榮威憋了那麼多年的大招,榮威RX5確實是相當的不簡單。從造型設計上來看,榮威RX5有着各種高端德系車的影子。直觀的像前臉的展翼式中網,線條剛硬、簡潔,大氣如途觀。且LED大燈內部,有精緻的設計結構與中網相融,个中的工藝有着極高的難度。再比如車側上的刀鋒腰線,依靠3.5mm的鈑金工藝營造出了深層次的刀鋒效果,凸顯出豐富的力量感。縱觀這些巧妙但精心的設計,不僅關乎於高昂的成本,還考驗着設計手法的水準,若非高檔豪車,絕不會貿然使用。

在車廂的內部,其有着各種質感細膩的軟性皮革進行包裹。用上汽的話說,“榮威RX5是目前自主品牌SUV里,使用最多軟性材質進行內裝的SUV。”如果說摸着各種細膩的皮革還不能讓你興奮,那中控上那塊面積比Ipad還大的10.4寸全彩液晶觸控屏絕對能夠讓你瞬間高潮了。通過這塊屏幕,你可以把空調、天窗、安全系統等涉及車輛的功能調節全都玩個遍。這種高大上的酷炫體驗,一直是特斯拉的招牌。但如今想想榮威RX5的起售價,才9.98萬,我的天~~~

官方指導價:20.99-34.99萬

說起別克,大家總會說,“不就跟雪佛蘭差不多嘛,

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

還在煩惱搬家費用要多少哪?台中大展搬家線上試算搬家費用,從此不再擔心「物品怎麼計費」、「多少車才能裝完」

有什麼牛逼的呀?!”但事實上,在別克的老家—美國,別克旗下車型的售價往往跟寶馬、奧迪、沃爾沃等豪華品牌看齊。這並非是別克自嗨地定個高價錢,而是旗下的產品確實是有一定的豪華調性,譬如如今排在合資SUV銷量榜首上第一位的昂科威。

打開昂科威的車門,第一時間定住眼睛的,除了那個包圍感十足的飛翼式中控台以外,就數那些面積巨大的棕色皮革面料。這些面料遍布在中控台上、門板上,無論用眼看還是用手摸,你都能夠充分感受到高貴的氣息。當然,設計師還把真皮的最佳搭檔—木紋裝飾面板也一併加入,如此一碰撞完全就是豪氣外露了。雖然如今許多車企也開始使用大量的真皮、木紋飾板,試圖使得自家的汽車更顯高大上。但這30萬以下的價位,也只有昂科威能夠把內飾造型、顏色搭配、面料材質三方面融合到了極致。雖然我不敢說每一個人都能認同這種張揚的美式豪華,但喜歡奔馳寶馬的人,十有八九也會被昂科威所吸引。其次,昂科威對於車廂靜音性的打造上也是極為牛逼。各種隔音玻璃、隔音海綿、隔音墊片等隔音材料,無所不用其極。從實測的情況來看,昂科威是要比不少寶馬、奧迪的隔音更加出色的。從視覺、觸覺、聽覺的表現上,昂科威都對得起豪華這個詞,只是……人家的售價只有寶馬X3的一半。

官方指導價:16.98-30.28萬

好吧,我承認寶沃完全就是個徹頭徹尾的自主品牌(福田汽車),那些德國三大汽車生產商之一、德國斯圖加特總部研發等等全都是忽悠吃瓜群眾的說辭。但我也不得不說,BX7是自主品牌少有的具有高大上特質的SUV。

首先是鑲嵌在BX7中網之上的雙色菱形徽標,讓人一看就產生“恩,這車看起來不簡單”的感覺,我能想的原因是因為這個徽標跟林肯實在是太像。而其整體的車身線條基本以簡煉為主,你說不上它有什麼特別耀眼的地方,但平淡之中仍能夠感受到它的精緻所在,與一眾的德系豪華車有一定的相似性。在鈑金工藝、漆面光澤等細節處理上,也表現出了較高的水平。不過真正讓人產生“這是一輛豪華品牌”的判斷的,還是要歸結於內飾的功勞。用料上,搪塑工藝、真皮皮革、金屬飾條毫不吝嗇地一次性全部用上,這種做法基本就是奔馳的最愛了。整體的中控布局和寶馬相像,但實體按鈕的排列上更加簡潔。可以說,寶沃BX7的這套內飾完美地整合了奔馳以及寶馬的精華。光好看還不夠,配置上同樣是讓人虎軀一震。低配的車型上,便已經擁有無匙啟動、自動駐車、真皮座椅、自動空調等配置。別指望一般人能看出你買的是低配車,這完全就是中高配的規格。

本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

還在煩惱搬家費用要多少哪?台中大展搬家線上試算搬家費用,從此不再擔心「物品怎麼計費」、「多少車才能裝完」

“銅鼓之鄉”看銅鼓_網頁設計

※推薦評價好的iphone維修中心

擁有專業的維修技術團隊,同時聘請資深iphone手機維修專家,現場說明手機問題,快速修理,沒修好不收錢

  梁志敏

  銅鼓,中國南方及東南亞地區特有的青銅器。銅鼓體如圓墩,平面曲腰,中空無底,兩側附耳,遍體紋飾,鼓面立體裝飾以青蛙最為常見。

  2015年,第一次全國可移動文物普查銅鼓專項調查显示,目前我國館藏銅鼓1676面。民間藏鼓在2014年約1500面。廣西銅鼓以數量最多、種類最齊、體形碩大著稱,被譽為“銅鼓之鄉”“銅鼓大本營”。廣西民族博物館館藏近350面銅鼓,是目前世界上收藏古代銅鼓數量最多的博物館。

  銅鼓起源於2700年前春秋早期的雲南中西部,是由炊具銅釜演變而來。1975年,雲南楚雄萬家壩遺址23號墓出土4面銅鼓,鼓面上有煙熏的痕迹,說明它們曾作為炊具使用。

  戰國初期至東漢初期,早期銅鼓東傳到滇池,當地滇人在造型和紋飾上對銅鼓進一步美化,鑄造了精美絕倫的石寨山型銅鼓。銅鼓也由炊具發展為祭祀禮器和權力重器。

  東漢至唐代是銅鼓發展的鼎盛時期,各類新型銅鼓異軍突起。生活在廣西潯江流域的僚人鑄造了鼓面有豐富立體裝飾且紋飾高度圖案化的冷水沖型銅鼓。

  生活在廣東、廣西交界雲開大山地區及其周圍的俚人,已經鑄造和使用了體形碩大、幾何花紋豐富多彩的北流型、靈山型銅鼓。這個時期,各類型銅鼓爭奇鬥豔,崇尚體形魁偉和紋飾的神秘色彩,反映了銅鼓象徵統治權力的功能得到進一步加強。

  廣西民族博物館館藏101號雲雷紋大銅鼓(圖①)是國家一級文物,也是鎮館之寶。它出土於廣西北流,鑄造年代大約在西漢晚期,鼓面直徑達165厘米,殘重299公斤,被譽為“銅鼓王”。

  唐宋以後,銅鼓儘管體形變小,紋飾簡單,卻成為民間常用的祭祀禮器和打擊樂器。

  直到今天,我國南方的壯、瑤、苗、彝、水、布依等少數民族以及東南亞的克倫、克木、芒、泰等民族都還在使用銅鼓,但使用的場合、方式和文化意義各不相同。

台北網頁設計公司這麼多該如何選擇?

網動是一群專業、熱情、向前行的工作團隊,我們擁有靈活的組織與溝通的能力,能傾聽客戶聲音,激發創意的火花,呈現完美的作品

  不同年代、不同地區的銅鼓,其鼓形、紋飾各具特色。1980年在南寧召開的第一次中國古代銅鼓學術討論會上,經反覆討論,學者們最終以標準器分式,並以出土標準器的地名命名的辦法來劃分銅鼓類型,即“八分法”,分別是:萬家壩型、石寨山型、冷水沖型、遵義型、麻江型、北流型、靈山型和西盟型。

  萬家壩型銅鼓特點是鼓面窄小,鼓胸特別膨脹,鼓足短,足徑大,體型小而略扁;器壁渾厚,器表粗糙,有的通體無紋,有的裝飾稚拙簡樸的花紋,包含着後繼銅鼓裝飾藝術的萌芽(圖③:萬家壩型銅鼓——素紋銅鼓)。

  石寨山型銅鼓由萬家壩型銅鼓發展而來,這類銅鼓鼓形對稱和諧,裝飾華麗,多為幾何紋飾和寫實圖案,其中的羽人舞蹈、划船、捕魚、祭祀等寫實畫像,再現了當時南方民族的社會生活習俗。

  冷水沖型銅鼓由石寨山型銅鼓發展而來,其最大的特點就是花紋密集且高度圖案化,立體裝飾豐富,有青蛙、牛、馬、魚、穀倉、人物等等,如青蛙立體裝飾反映了古人求雨祈豐的信仰(圖②:冷水沖型銅鼓——牛拉橇飾變形羽人紋銅鼓)。

  遵義型銅鼓是冷水沖型銅鼓向麻江型銅鼓發展的一種過渡形態,最大的特點就是鼓面青蛙立體裝飾消失,但在鼓面有“蛙爪”紋。

  麻江型銅鼓鼓形矮扁,胸、腰、足三段無明顯分界,主要花紋有游旗、符錄、十二生肖、人物、花草、吉祥語和紀年銘文等,受漢文化影響比較明顯,也是現今我國南方少數民族普遍使用的銅鼓。

  北流型銅鼓以廣西北流市出土銅鼓為代表而得名,流行年代約為西漢至唐代,其特點是鼓形高大,鼓面大於鼓胸並有“垂檐”,附環耳,遍體多飾精細的雲雷紋等紋飾,鼓面的立蛙一般瘦小無紋,鼓面背部通常有調音鏟痕。

  靈山型銅鼓的造型與北流型銅鼓大體相似。不同的是,靈山型銅鼓鼓身一律附以扁耳,青蛙後足合併成為三足蛙,蛙背有紋飾,多見累蹲蛙。鼓面和鼓身多見錢紋、變形羽人紋、蟲紋、鳥紋、獸紋、四瓣花紋、蟬紋、席紋等,部分鼓的鼓身或鼓腔內有動物立體裝飾。

  西盟型銅鼓以中國雲南省西盟佤族地區使用銅鼓為代表,這類銅鼓鼓身接近直筒,無腰足之分,多三弦分暈,暈圈窄而密,鼓面紋飾多見鳥、魚、花、眼、米粒紋,鼓面青蛙立飾常見三累蹲蛙,甚至四蛙疊踞。現今東南亞克倫、泰等民族仍在使用此類型銅鼓。

  自唐代以來,關於銅鼓的詩歌就不絕於耳。唐代溫庭筠作《河瀆神祠》記錄了南方水邊民族將銅鼓作為祭祀禮器用於競渡賽神的場面。事實上,在石寨山型銅鼓鼓胸上,常常能見到划船紋,有的很明顯能看到兩排頭戴羽冠的人在奮力划船競渡。競渡賽神是百越民族重要的祭祀活動,滿庭的幡蓋與震天的鼓聲交相輝映,一展賽神風採的同時,也說明了銅鼓作為祭祀禮器的重要地位。(圖④:廣西貴縣羅泊灣漢墓M110號鼓鼓身展開圖,鼓胸划船紋展示了百越民族競渡賽神場面。)

  在漫長的歷史發展過程中,銅鼓與當地各民族的社會、經濟、文化生活緊密地聯繫在一起,形成獨特的銅鼓文化。銅鼓曾作為統治權力的象徵,作為祭祀用具和娛樂用具,廣泛用於陳列、集眾、盟會、戰陣、祭祀、娛樂、喪葬等場合。銅鼓又是一種綜合藝術品,集冶鍊、鑄造、繪畫、雕塑、音樂、舞蹈於一身,其獨特的造型和豐富的紋飾,反映了鑄造銅鼓的民族當時的經濟狀況、文化面貌,堪稱一部民族歷史的百科全書。而且,銅鼓並沒有消失在歷史的長河中,它穿越千年,傳承着民族厚重的歷史和燦爛的文化,並在新時代繼續奏響民族和諧之歌。

  (作者分別為廣西民族博物館館長和廣西民族博物館研究三部主任。本報記者李縱整理。圖片由廣西民族博物館提供)

本站聲明:網站內容來http://www.societynews.cn/html/wh/fq/,如有侵權,請聯繫我們,我們將及時處理

網頁設計最專業,超強功能平台可客製化

窩窩以「數位行銷」「品牌經營」「網站與應用程式」「印刷品設計」等四大主軸,為每一位客戶客製建立行銷脈絡及洞燭市場先機。