RocketMQ系列(三)消息的生產與消費

前面的章節,我們已經把RocketMQ的環境搭建起來了,是一個兩主兩從的異步集群。接下來,我們就看看怎麼去使用RocketMQ,在使用之前,先要在NameServer中創建Topic,我們知道RocketMQ是基於Topic的消息隊列,在生產者發送消息的時候,要指定消息的Topic,這個Topic的路由規則是怎樣的,這些都要在NameServer中去創建。

Topic的創建

我們先看看Topic的命令是如何使用的,如下:

./bin/mqadmin updateTopic -h

usage: mqadmin updateTopic -b <arg> | -c <arg>  [-h] [-n <arg>] [-o <arg>] [-p <arg>] [-r <arg>] [-s <arg>] -t
       <arg> [-u <arg>] [-w <arg>]
 -b,--brokerAddr <arg>       create topic to which broker
 -c,--clusterName <arg>      create topic to which cluster
 -h,--help                   Print help
 -n,--namesrvAddr <arg>      Name server address list, eg: 192.168.0.1:9876;192.168.0.2:9876
 -o,--order <arg>            set topic's order(true|false)
 -p,--perm <arg>             set topic's permission(2|4|6), intro[2:W 4:R; 6:RW]
 -r,--readQueueNums <arg>    set read queue nums
 -s,--hasUnitSub <arg>       has unit sub (true|false)
 -t,--topic <arg>            topic name
 -u,--unit <arg>             is unit topic (true|false)
 -w,--writeQueueNums <arg>   set write queue nums

其中有一段,-b <arg> | -c <arg>,說明這個Topic可以指定集群,也可以指定隊列,我們先創建一個Topic指定集群,因為集群中有兩個隊列broker-abroker-b,看看我們的消息是否在兩個隊列中負載;然後再創建一個Topic指向broker-a,再看看這個Topic的消息是不是只在broker-a中。

創建兩個Topic,

./bin/mqadmin updateTopic -c 'RocketMQ-Cluster' -t cluster-topic -n '192.168.73.130:9876;192.168.73.131:9876;192.168.73.132:9876'

./bin/mqadmin updateTopic -b 192.168.73.130:10911 -t broker-a-topic

第一個命令創建了一個集群的Topic,叫做cluster-topic;第二個命令創建了一個只在broker-a中才有的Topic,我們指定了-b 192.168.73.130:10911,這個是broker-a的地址和端口。

生產者發送消息

我們新建SpringBoot項目,然後引入RocketMQ的jar包,

<dependency>
    <groupId>org.apache.rocketmq</groupId>
    <artifactId>rocketmq-client</artifactId>
    <version>4.3.0</version>
</dependency>

然後配置一下生產者的客戶端,在這裏使用@Configuration這個註解,具體如下:

@Configuration
public class RocketMQConfig {

    @Bean(initMethod = "start",destroyMethod = "shutdown")
    public DefaultMQProducer producer() {
        DefaultMQProducer producer = new
                DefaultMQProducer("DefaultMQProducer");
											producer.setNamesrvAddr("192.168.73.130:9876;192.168.73.131:9876;192.168.73.132:9876;");
        return producer;
    }
}
  • 首先創建一個生產者組,名字叫做DefaultMQProducer;
  • 然後指定NameServer,192.168.73.130:9876;192.168.73.131:9876;192.168.73.132:9876;
  • 最後在@Bean註解中指定初始化的方法,和銷毀的方法;

這樣,生產者的客戶端就配置好了,然後再寫個Test類,在Test類中向MQ中發送消息,如下,

@SpringBootTest
class RocketmqDemoApplicationTests {

    @Autowired
    public DefaultMQProducer defaultMQProducer;

    @Test
    public void producerTest() throws Exception {

        for (int i = 0;i<5;i++) {
            Message message = new Message();
            message.setTopic("cluster-topic");
            message.setKeys("key-"+i);
            message.setBody(("this is simpleMQ,my NO is "+i).getBytes());

            SendResult sendResult = defaultMQProducer.send(message);
            System.out.println("SendStatus:" + sendResult.getSendStatus());
            System.out.println("BrokerName:" + sendResult.getMessageQueue().getBrokerName());
        }
    }
}
  • 我們先自動注入前面配置DefaultMQProducer;
  • 然後在Test方法中,循環5次,發送5個消息,消息的Topic指定為cluster-topic,是集群的消息,然後再設置消息的key和內容,最後調用send方法發送消息,這個send方法是同步方法,程序運行到這裡會阻塞,等待返回的結果;
  • 最後,我們打印出返回的結果和broker的名字;

運行一下,看看結果:

SendStatus:SEND_OK
BrokerName:broker-b
SendStatus:SEND_OK
BrokerName:broker-b
SendStatus:SEND_OK
BrokerName:broker-b
SendStatus:SEND_OK
BrokerName:broker-b
SendStatus:SEND_OK
BrokerName:broker-a

5個消息發送都是成功的,而發送的隊列有4個是broker-b,1個broker-a,說明兩個broker之間還是有負載的,負載的規則我們猜測是隨機。

我們再寫個測試方法,看看broker-a-topic這個Topic的發送結果是什麼樣子的,如下:

@Test
public void brokerTopicTest() throws Exception {

    for (int i = 0;i<5;i++) {
        Message message = new Message();
        message.setTopic("broker-a-topic");
        message.setKeys("key-"+i);
        message.setBody(("this is broker-a-topic's MQ,my NO is "+i).getBytes());

        defaultMQProducer.send(message, new SendCallback() {
            @Override
            public void onSuccess(SendResult sendResult) {
                System.out.println("SendStatus:" + sendResult.getSendStatus());
                System.out.println("BrokerName:" + sendResult.getMessageQueue().getBrokerName());
            }

            @Override
            public void onException(Throwable e) {
                e.printStackTrace();
            }
        });

        System.out.println("異步發送 i="+i);

    }
}
  • 消息的Topic指定的是broker-a-topic,這個Topic我們只指定了broker-a這個隊列;
  • 發送的時候我們使用的是異步發送,程序到這裏不會阻塞,而是繼續向下執行,發送的結果正常或者異常,會調用對應的onSuccess和onException方法;
  • 我們在onSuccess方法中,打印出發送的結果和隊列的名稱;

運行一下,看看結果:

異步發送 i=0
異步發送 i=1
異步發送 i=2
異步發送 i=3
異步發送 i=4
SendStatus:SEND_OK
SendStatus:SEND_OK
SendStatus:SEND_OK
SendStatus:SEND_OK
BrokerName:broker-a
SendStatus:SEND_OK
BrokerName:broker-a
BrokerName:broker-a
BrokerName:broker-a
BrokerName:broker-a

由於我們是異步發送,所以最後的日誌先打印了出來,然後打印出返回的結果,都是發送成功的,並且隊列都是broker-a,完全符合我們的預期。

消費者

生產的消息已經發送到了隊列當中,再來看看消費者端如何消費這個消息,我們在這個配置類中配置消費者,如下:

@Bean(initMethod = "start",destroyMethod = "shutdown")
public DefaultMQPushConsumer pushConsumer() throws MQClientException {
    DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("DefaultMQPushConsumer");
    consumer.setNamesrvAddr("192.168.73.130:9876;192.168.73.131:9876;192.168.73.132:9876;");
    consumer.subscribe("cluster-topic","*");
    consumer.registerMessageListener(new MessageListenerConcurrently() {
        @Override
        public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {
            if (msgs!=null&&msgs.size()>0) {
                for (MessageExt msg : msgs) {
                    System.out.println(new String(msg.getBody()));
                    System.out.println(context.getMessageQueue().getBrokerName());
                }
            }

            return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
        }
    } );
    return consumer;
}
  • 我們創建了一個消費者組,名字叫做DefaultMQPushConsumer;
  • 然後指定NameServer集群,192.168.73.130:9876;192.168.73.131:9876;192.168.73.132:9876;
  • 消費者訂閱的Topic,這裏我們訂閱的是cluster-topic,後面的*號是對應的tag,代表我們訂閱所有的tag;
  • 最後註冊一個併發執行的消息監聽器,實現裡邊的consumeMessage方法,在方法中,我們打印出消息體的內容,和消息所在的隊列;
  • 如果消息消費成功,返回CONSUME_SUCCESS,如果出現異常等情況,我們要返回RECONSUME_LATER,說明這個消息還要再次消費;

好了,這個訂閱了cluster-topic的消費者,配置完了,我們啟動一下項目,看看消費的結果如何,

this is simpleMQ,my NO is 2
broker-b
this is simpleMQ,my NO is 3
broker-b
this is simpleMQ,my NO is 1
broker-b
this is simpleMQ,my NO is 0
broker-a
this is simpleMQ,my NO is 4
broker-b

結果符合預期,cluster-topic中的5個消息全部消費成功,而且隊列是4個broker-b,1個broker-a,和發送時的結果是一致的。

大家有問題歡迎評論區討論~

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

【其他文章推薦】

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

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

※回頭車貨運收費標準

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

※超省錢租車方案

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

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

「MoreThanJava」Java發展史及起航新世界

  • 「MoreThanJava」 宣揚的是 「學習,不止 CODE」,本系列 Java 基礎教程是自己在結合各方面的知識之後,對 Java 基礎的一個總回顧,旨在 「幫助新朋友快速高質量的學習」
  • 當然 不論新老朋友 我相信您都可以 從中獲益。如果覺得 「不錯」 的朋友,歡迎 「關注 + 留言 + 分享」,文末有完整的獲取鏈接,您的支持是我前進的最大的動力!

Part 1. Java 發展簡史

  • 圖片來源:https://www.geeksforgeeks.org/the-complete-history-of-java-programming-language/

起源:”Green” 項目

20 世紀 90 年代,單片式計算機系統誕生,單片式計算機系統不僅廉價,而且功能強大,使用它可以大幅度提升消費性电子產品的智能化程度。

SUN 公司為了搶佔市場先機,在 1991 年成立了一個由詹姆斯·高斯林(James Gosling)領導,名為 “Green” 項目小組,目的是開發一種 能夠在各種消費性电子產品上運行的程序架構(主要是像 有線電視轉換盒 這一類 處理能力和內存都很有限,並且 CPU 廠商又各不相同 的消費設備)。

由於這些消費設備的處理能力和內存都有限,所以語言必須 非常小且能夠生成非常緊湊的代碼。另外,由於不同廠商會選擇不同的 CPU,因此很重要的一點是這種語言 不應該與任何特定的體繫結構綁定。代碼短小、緊湊且與平台無關,這些要求促使開發團隊設計出一個 可移植的語言,可以為虛擬機生成中間代碼。

不過,Sun 公司的人都有 UNIX 的應用背景。因此,所開發的語言以 C++ 為基礎,而不是 Lisp/ Smalltalk 或 Pascal。不過,就像 Gosling 在專訪中談道:“畢竟,語言只是實現目標的工具,而不是目標本身。”

Gosling 把這種語言稱為 “Oak”(直譯為橡樹,大概是因為它非常喜歡自己辦公室窗外的一顆橡樹…)。後來 Sun 公司發現,Oak 是一種已有的計算機語言名字,於是 Gosling 和他的團隊進行了一次頭腦風暴,多次討論后,從 Java/ DNA/ SILK/ RUBY 中決定使用 Java 來命名。事實證明這是一個很有靈感的選擇。

埋沒:沒人為 “Green” 項目買單

1992 年,Green 項目發布了它的第一個產品,稱之為 「* 7」。這個產品可以提供非常智能的遠程控制。遺憾的是,Sun 公司對生產這個產品並不感興趣。Green 項目組的人員必須找出其他的方法來講他們的技術推向市場。

然而,仍然沒有任何一家標準消費品电子公司對此感興趣。於是,Green 項目組投標了一個設計有線電視盒的項目,它能提供視頻點播等新型有線服務,但他們沒能拿到這個合同 (有趣的是,得到這個項目的公司的領導恰恰是開闢 Netscape 公司的 Jim Clark。Netscape 公司後來對 Java 的成功給予了很大的幫助。)

Green 項目 (這時已經換了一個新名字 ———— “First Person 公司”)1993 年一整年以及 1994 年上半年,一直在苦苦尋找買家購買他們的技術。然而,一個也沒有找到 (Partick Naughton ———— 項目組的創始人之一,也是完成了大多數營銷工作的人,聲稱為了銷售這項技術,已累計飛行了 300,000 英里)

1994 年 First Person 公司解散了。

轉機:Internet 的壯大

當這一切在 Sun 公司發生的時候,Internet 的萬維網也在日漸發展壯大。萬維網的關鍵是把超文本頁面轉換到屏幕上的瀏覽器。

1994 年大多數人都在使用 Mosaic,這是一個 1993 年出自伊利諾斯大學超級計算中心的非商業化的 Web 瀏覽器( Mosaic 的一部分是由 Marc Andreessen 編寫的。當時,他作為一名參加半工半讀項目的本科生, 編寫了這個軟件,每小時的薪水只有 6.85 美元。他後來成了 Netscape 公司的創始人之一和技術總監, 可謂名利雙收。)

在接受 SunWorld 採訪的時候,Gosling 說在 1994 年中期,Java 語言的開發者意識到: “我們能夠建立一個相當酷的瀏覽器。在客戶機/ 服務器主流模型中,瀏覽器恰好需要我們已經完成的一些工作:體繫結構中立、實時、可靠、安全 ———— 這些在工作站環境並不太重要,所以,我們決定開發瀏覽器”

實際的瀏覽器是由 Patrick Naughton 和 Jonathan Payne 開發的,並演變為 HotJava 瀏覽器。為了炫耀 Java 語言超強的能力,HotJava 瀏覽器採用 Java 編寫。設計者讓 HotJava 瀏覽器具有在網頁中執行內嵌代碼的能力。 這一 “技術證明” 在 1995523 日的 SunWorld’95 上得到展示,同時引發了人們延續至今的對 Java 的狂熱追逐。

至此,這一場持續長達 20 多年的「Java 熱」開始了。

  • 觀察近 20 年的數據,Java 的排名從未跌出過前三,而且有將近一半的年份搶佔了透明,不得不令人感嘆:「流水的程序員,鐵打的 Java 啊!」

Part 2. Java 與 Internet

  • 圖片來源:https://www.morethanshipping.com/internet-things-iot-will-help-logistics/

如果 Java 僅僅只是眾多的程序設計語言中的一種,你可能就會問:為什麼它如此重要呢?為什麼它促使計算機編程語言向前邁進了革命性的一步?

如果從傳統的程序設計的角度看,問題的答案似乎不太明顯。儘管 Java 對於解決傳統的單機程序設計問題非常有用,但同樣重要的事,它解決了在萬維網(WWW)上的程序設計問題

Web 1.0 時代的程序設計問題

在剛創造 Java 的年代(20 世紀 90 年代),整個互聯網還處於 Web 1.0 的網絡萌芽階段。

在 之前的一篇文章 其實有對 Web 做了一些概念性的描述(概念、發展、體繫結構)。

問題一:網頁沒有交互

Web 1.0 的網站是靜態的。最初的互聯網只有一種很簡單的 單向過程:你 對某一個服務器發起一個請求,然後它 返回 給你一個 文件,你的機器(俗稱客戶端)上的 瀏覽器軟件 根據本地機器的格式來 解讀並展示 這個文件的內容。這期間沒有任何的交互發生,因為最初的瀏覽器只是一個 “展示器”,它甚至不能執行最簡單的計算任務。(另一方面,它確是安全的,因為它在你的本地機器上不會執行任何程序,而這些程序可能包含 bug 和病毒)

用戶 只能訪問 這些站點而不會對它們做出任何貢獻。這就像你捧起書架中的一本書一樣,它是一種 「只讀」 模式的存在,如果你想與創造這本書的出版社也好,作者也好建立鏈接,只能通過其他的一些方式。(當時的網站也是主要是向消費者展示產品,從感興趣的消費者那裡收錢)

很快人們就不滿足於只是從服務器傳遞迴頁面,人們希望實現完整的客戶/ 服務器能力,使得客戶可以將信息反饋給服務器,來完成例如:在服務器上進行數據查找,並將用戶提供的新信息加到服務器中,服務器管理人員接受到新信息之後就下發訂單的操作。

問題二:響應緩慢

早期的瀏覽器不僅沒有交互,而且它還趨向於讓服務器和 Internet 阻塞。因為在任何時候,只要 你需要完成 通過編程 才能實現的 任務,就必須將信息發揮到 服務器處理。然而在互聯網中,在任意時刻都有可能會有 成百上千 的客戶向服務器發出請求,所以任何小的延遲都會產生重大的影響。

為了解決這個問題,人們採用了各種不同的方法。首先,圖形標準得到了加強,這使得在瀏覽器中可以播放質量更好的動畫和視頻。剩下的問題通過引入 在客戶端瀏覽器中運行程序 的能力就可以解決,這被稱為 「客戶端編程」

問題三:客戶端編程平台各異

大多數運行 Web 瀏覽器的機器都是能夠執行大型任務的強有力的引擎。在使用原始的靜態 HTML 方式的情況下,它們通常只是閑在那裡,等着服務器送來下一個頁面。

客戶端編程意味着 Web 瀏覽器能夠用來執行任何它可以完成的工作,使得返回給用戶的結果 更迅速 (不用全部的結果都等着服務器來運算),而且使得你的網站 更加具有交互性 (那些不需要使用服務器數據的操作可以完全在本地完成)

但客戶端編程的問題是:它與通常意義上的編程十分不同,參數幾乎相同,而平台卻不同。在 Web 瀏覽器中編程就像是使用一台功能受限的操作系統,而每一台功能還略微的有差別。最終,你不僅需要編寫程序,還需要處理因為平台不同帶來的兼容問題。

小結

因為「沒有交互」和「訪問緩慢」的問題,所以引入「客戶端編程」,因為引入客戶端編程,遇到「各種各樣不僅僅是平台差異帶來的問題」。

Java 的解決方案

插件和腳本語言 “差點意思”

在當時,客戶端編程所邁出的最重要的一步就是 插件(plug-in) 的開發。通過這種方式,用戶可以下載一段代碼,並將其插入到瀏覽器中適當的位置,以此來為瀏覽器添加新的功能。

  • 圖片來源:https://zhuanlan.zhihu.com/p/28889449

插件又引發了瀏覽器 腳本語言(scripting language) 的開發。通過使用某種腳本語言,你可以將客戶端程序的源代碼直接嵌入到 HTML 頁面中,解釋這種語言的插件在 HTML 頁面被显示時自動激活。(腳本語言可以解決客戶端編程中遇到的百分之八十的問題) 腳本語言先天就相當易於理解,因為它們只是作為 HTML 頁面一部分的簡單文本,當服務器收到要獲取該頁面的請求時,它們可以被快速加載。此方法的缺點是代碼會直接暴露給任何瀏覽(或竊取)的人,但是,通常不會使用腳本語言去做相當複雜的事情,所以這個缺點不會太嚴重。

如果腳本語言可以解決客戶端編程百分之八十的問題的話,那麼剩下那百分之二十 (那才是真正難啃的骨頭) 又該怎麼辦呢?

Java 帶來了 Applet

  • 圖片來源:https://www.ibm.com/developerworks/cn/java/

Java 帶着 Applet 及時出現。

1995 年, Java 之父 James Gosling 和 Sun 公司科學辦公室主任 John Gage 一起前往蒙特利,去參加一個 TED 會議,兩人要在那裡展示一個划時代的技術, 號稱向能把枯燥的靜態網頁變得栩栩如生,美輪美奐。

演示開始了,James Gosling 把鼠標指向了瀏覽器中的一個 3D 分子模型,來回地旋轉它,台下的觀眾發出陣陣驚嘆聲,他們被鎮住了,從沒有人想到在瀏覽器中也能實現這麼 “美輪美奐” 的效果 !

  • 圖片來源:https://zhuanlan.51cto.com/art/201911/606791.htm

Java 火了!

這個演示所使用的技術就是 Applet。

Applet 是只在 Web 瀏覽器中運行的小程序,它是作為網頁的一部分而自動下載的 (就像是網站圖片被自動下載一樣)。當 Applet 被激活時,它變開始執行一個程序,這正是它優雅的地方:它提供了一種分發軟件的方式,一旦用戶需要客戶端軟件時,就自動從服務器把客戶端軟件分發給用戶。

用戶獲取最新版本的客戶端軟件時不會產生錯誤,而且也不需要很麻煩的重新安裝過程 (有點像現在的小程序)。Java 的這種設計方式,使得程序員只需要創建單一的程序,而只要一台計算機有瀏覽器,且瀏覽器具有內置的 Java 解釋器 (大部分機器都有),那麼這個程序就可以自動在這台計算客戶端盡可能地多做事情。例如,不必跨網絡地發送一張請求表單來檢查自己是否填寫了錯誤的日期或者其他參數,客戶端計算機就可以快速地標出錯誤數據。

這不僅立即就獲得了快速的響應能力,而且也降低了網絡流量和服務器負載,從而不會使整個網絡的速度慢下來。

Java 對服務端編程的加持

當提出對服務器的請求之後,會發生什麼呢?大部分時間,請求只是要求「給我發送一個文件」,之後瀏覽器會以某種適當的形式解釋這個文件,例如將其作為 HTML 頁面、圖片、Java applet 或腳本程序等來解釋。

更複雜的對服務器的請求通常涉及數據庫,這可能會需要服務器端對請求到的數據進行一定的編排 (例如把數據嵌到一個表格之內) 來最終使其成為一個 HTML 文件發送給客戶端 (當然,如果客戶端具備更多的只能,你完全可以把原始數據發送給客戶端讓它自己進行編排工作..)。另一種常見的情形是:你註冊賬號或者提交訂單,這對數據庫數據造成了更改,而這些必須通過服務器端的某些代碼進行處理,這就是所謂的 服務端編程

Java 後來編寫的被稱為 Servlet 的程序 (及其衍生物 JSP),是許多開發網站的公司遷移到 Java 上的主要原因。尤其是因為憑藉 Java 跨平台的特性 消除了處理具有不同能力的瀏覽器時所遇到的問題

小結

Java 憑藉自身強大、安全、跨平台、國際化的特性,加上解決了當時客戶端、服務端開發的諸多 “痛點”,成功搭上 Internet 這列 “國際快車”,一躍成為了時下 20 實際 90 年代中) 最熱門的語言之一,並持續火熱至今 (這跟 Java 自身不斷地成熟有脫不開的關係)

現如今 Applet 和 Servlet 兩個技術已經逐步淡出人們的視野,但在 Java 的歷史上,是舉足輕重的兩個突破點。

Part 3. Hello Wrold!

  • 圖片來源:https://medium.com/@thiagonascimento/time-to-first-hello-world-11a4735602f2

當我們集中注意力 學習一種新的編程語言 時,教程上的 第一個案例 就是如何 在計算機屏幕上显示短語 Hello,world! 也許這條短語最知名的來源是貝爾實驗室的備忘錄《C 語言編程——一份教程》。這份材料編寫於 1974 年。不過在編寫於 1972 年的 B 語言教程中,我們同樣看到了這條短語的身影。

Hello, World! 是一種偉大的教學方法。這是一項能夠輕鬆完成的小任務,同時也代表着一種標準,體現出不同編程語言之間的重要差異。此外,這也是高級程序員在安裝新環境測試一切是否正常的快速簡便方法。(有時候,程序員們也會使用「hello world」運行時間來比較不同語言與環境的速度水平。) 也許更重要的是,Hello, world! 具有一種溫暖而柔和的力量,對編程新人有着一種莫名的親和力。

「代碼擁有無窮威力,而新的世界已經向你張開懷抱。」 ———— Chris Noessel,IBM 公司 AI 設計負責人

public class Main {

    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

以上就是Java 語言版本 Hello World 程序。(現在看不懂也沒關係,可以進 https://c.runoob.com/compile/10 這個網站在線運行測試一下看看效果…)

至此,歡迎你進入 Java 的世界。

參考資料

  1. 《Thinking in Java》 第四版;
  2. 《Java 核心技術 卷 I》 第 11 版;
  3. The complete History of Java Programming Language – https://www.geeksforgeeks.org/the-complete-history-of-java-programming-language/
  4. Java 發展簡史:初生遇低谷,崛起於互聯網 – https://www.chainnews.com/articles/628715645859.htm
  5. 永別了,Java的“小蘋果”! – https://zhuanlan.51cto.com/art/201911/606791.htm
  6. 改變世界的代碼行 – https://www.infoq.cn/article/5CaYH8NbS6BmptWKRgkX

往期精彩

  1. 「MoreThanJava」當大學選擇了計算機之後應該知道的
  2. 「MoreThanJava」計算機發展史—從織布機到IBM
  3. 「MoreThanJava」計算機系統概述
  4. 「MoreThanJava」一文了解二進制和CPU工作原理
  5. 「MoreThanJava」機器指令到彙編再到高級編程語言
  • 本文已收錄至我的 Github 程序員成長系列 【More Than Java】,學習,不止 Code,歡迎 star:https://github.com/wmyskxz/MoreThanJava
  • 個人公眾號 :wmyskxz,個人獨立域名博客:wmyskxz.com,堅持原創輸出,下方掃碼關注,2020,與您共同成長!

非常感謝各位人才能 看到這裏,如果覺得本篇文章寫得不錯,覺得 「我沒有三顆心臟」有點東西 的話,求點贊,求關注,求分享,求留言!

創作不易,各位的支持和認可,就是我創作的最大動力,我們下篇文章見!

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

【其他文章推薦】

※回頭車貨運收費標準

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

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

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

※教你寫出一流的銷售文案?

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

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

俄羅斯西伯利亞飆高溫 北極圈小鎮破天荒測攝氏38°C

摘錄自2020年6月22日聯合報報導

根據氣象數據網站的資料顯示,過去曾出現攝氏零下68°C極端低溫的俄羅斯西伯利亞小鎮維爾霍揚斯克(Verkhoyansk),竟在昨天測得攝氏38°C高溫。

美聯社報導,彙整俄羅斯氣象數據網站Pogoda iKlimat的資料指出,維爾霍揚斯克鎮20日高溫達到攝氏38°C(華氏100.4°F)。

西伯利亞大部分地區今年出現異常高溫,導致大規模野火重創當地森林。俄羅斯薩哈共和國(Sakha Republic)的維爾霍揚斯克鎮在北極圈內,位於首都莫斯科(Moscow)東北方大約4660公里處。

全球變遷
氣候變遷
國際新聞
俄羅斯
西伯利亞
歷史高溫
全球暖化

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

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

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

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

※教你寫出一流的銷售文案?

※超省錢租車方案

※回頭車貨運收費標準

這台車日行1200公里 連外國人都驚訝

上汽大通的海外市場表現澳新市場作為上汽大通的第一大海外市場,而且也是唯一獲得大批量歐洲政府採購、唯一進入歐洲國家政府執法機構的中國品牌,同時,在澳洲也成為了銷量第一的中國汽車品牌,在1-9月,上汽大通在澳新市場的銷量達到1791台,同比去年銷量增長了90。

一份值得學習的敬業

戴夫已經在陶朗加(新西蘭北島北部港市)生活了40多年,而對於工作,他說是一種享受,還必不想退休,每天工作的開始先從家中出發,北上漢密爾頓裝貨、再到北邊的奧克蘭進行卸貨和裝報,然後返回陶朗加換乘後半夜的司機繼續南下吉斯伯恩完成《先驅報》的送遞並返回家中。

戴夫從1986年開始從事送遞業務,一直從事報紙信件投遞的工作,30年送遞工作已經累計送達4000萬份貨物。

6年前,戴夫就為新西蘭的第一大報社《先驅報》(日報,日發行量15萬份)進行送貨,這條線路一年下來需要跑45萬公里,從第一次駕駛上汽大通的V80已經有2年多了,不到3年的時間里,前兩周破一百萬公里總行駛里程(三台V80里程合計)。

目前一共有5個司機,實行輪班制,負責陶朗加到漢密爾頓、奧克蘭再南下吉斯伯恩,並最後返回陶朗加約1200公里里程的線路,除了聖誕和復活節,工作風雨無阻,實行做三天休息三天的交替輪班制度,對於已經到了退休年齡的戴夫,還沒有考慮退休必很享受這份工作,會一直開下去。

上汽大通的海外市場表現

澳新市場作為上汽大通的第一大海外市場,而且也是唯一獲得大批量歐洲政府採購、唯一進入歐洲國家政府執法機構的中國品牌,同時,在澳洲也成為了銷量第一的中國汽車品牌,在1-9月,上汽大通在澳新市場的銷量達到1791台,同比去年銷量增長了90.9%,作為上汽大通的第一大海外市場,澳新市場的銷量佔據了上汽大通整個海外銷量的30%。

上汽在澳洲市場的大熱和良好的聲譽,其最根本的原因還是自身產品的性價比高,更合理的市場價,更合理的豐富的配置及良好的安全性和耐用性,都是讓它在市場立足必越來越強的原因,雖然大通進入澳州市場不久,但勢頭穩步上升,可見上汽集團的全球化戰略正初見成效,接下來,上汽大通還將向澳新市場導入一系列新品。包括純電動寬體輕客EV80、中高端皮卡、中大型SUV D90等,隨着新品投放,期待上汽大通如何將代表中國汽車,成為歐美日韓車系之外的又一股強大力量,不僅使中國汽車在澳新市場崛起,並且希望為澳新消費者帶來更多更優秀的產品和服務。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

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

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

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

※教你寫出一流的銷售文案?

※回頭車貨運收費標準

※別再煩惱如何寫文案,掌握八大原則!

武漢肺炎疫苗用到鱟血 替代方案行不行? 保育團體、藥廠各持立場

環境資訊中心綜合外電;許芷榕 編譯;鄒敏惠 審校

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

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

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

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

※別再煩惱如何寫文案,掌握八大原則!

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

※回頭車貨運收費標準

研究:野火改變了鳥類叫聲 區域性「方言」隨野火次數增加而更多樣

環境資訊中心綜合外電;姜唯 編譯;林大利 審校

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

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

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

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

※教你寫出一流的銷售文案?

※回頭車貨運收費標準

※別再煩惱如何寫文案,掌握八大原則!

泰國禁農藥「巴拉刈」和「毒死蜱」 美國、巴西抗議

摘錄自2020年6月22日自由時報報導

泰國本(6)月初通過新的農藥禁令,將劇毒農藥巴拉刈(Paraquat)和殺蟲劑「毒死蜱」(Chlorpyrifos)列入危險物質清單,進而影響另條法規:禁止含有殘留違禁化學物質的農產品進口。美國與巴西對此提出抗議,認為泰國過度限制、強硬的手段,會損害他們農產品的出口。

泰國農業部副部長Mananya Thaiset表示,巴拉刈已在各種研究中被證明其與帕金森氏症有關。而針對「毒死蜱」(Chlorpyrifos),許多科學研究也提出它會影響孩童的大腦發育,已在歐盟和美國加州被禁止使用。

泰國目前約有1000萬個農戶開始受到禁令影響,該國農業普遍認為相關禁令會產生連鎖破壞反應,因為泰國的動物飼料幾乎完全仰賴進口的大豆、小麥。工商業暨銀行聯合委員會(Joint Standing Committee on Commerce, Industry and Banking)警告,該禁令將造成1.7兆泰銖(約新台幣1.6兆元)的損失和1200萬個工作機會消失,呼籲總理放寬禁令緩衝期限至2021年年底。

毒物
農林漁牧業
公害污染
永續發展
環境經濟
污染治理
土地利用
循環經濟
國際新聞
泰國
美國
巴西
禁用農藥
糧食

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

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

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

※別再煩惱如何寫文案,掌握八大原則!

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

※回頭車貨運收費標準

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

6萬不到的大空間7座車 是否能超越神車宏光?

動力方面,北汽幻速H3採用的是1。5L動力發動機,最大功率113馬力,最大扭矩為150牛米。匹配一款5速手動變速箱。主要競爭對手分析:銷量神車 五菱宏光指導價:4。18-6。98萬銷量大得驚人的宏光是幻速H3的主要競爭對手,而我們可以拿幻速H3新上市的車型簡單對比一下同價位的宏光。

近日,北汽幻速官方宣布,北汽幻速H3手動舒適天窗版車型已經正式上市!它的售價僅為5.98萬元,這款車型是在H3舒適型的基礎上加入了許多配置,但是售價沒有增加!

先來看看這款新車型帶有的亮點配置

電動天窗

8英寸液晶屏

GpS導航、藍牙

ABS+EBD

倒車雷達

行車自動落鎖/解鎖

前排駕駛席安全氣囊

對於一輛售價不足6萬的MpV來說,這樣的配置還是相當給力的。

我們再來看看幻速H3的車身尺寸,首先它的車身長寬高為4660*1770*1780mm,帶行李架車型高度為1800mm。軸距達到了2800mm,並且提供7或8座的座椅布局,實用性表現不錯。

而且其後備廂的儲物空間可以擴展至3573L。

外觀設計在這個價位中有着較好的表現,中網設計簡約,但是頭燈造型犀利。車身的輪廓線條比較分明、幹練。

動力方面,北汽幻速H3採用的是1.5L動力發動機,最大功率113馬力,最大扭矩為150牛米。匹配一款5速手動變速箱。

主要競爭對手分析:

銷量神車 五菱宏光

指導價:4.18-6.98萬

銷量大得驚人的宏光是幻速H3的主要競爭對手,而我們可以拿幻速H3新上市的車型簡單對比一下同價位的宏光。

可以說,幻速H3手動舒適天窗版車型還是要多出許多舒適性配置的,性價比表現不錯。而宏光的起售價則更多,有更多的車型可選擇。

編者語:

低價的MpV市場發展到現在,在配置、性價比方面的競爭也日益激烈了!如果你覺得幻速H3手動舒適天窗版的配置足夠給力的話,就去多了解這款車吧!本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

※別再煩惱如何寫文案,掌握八大原則!

※教你寫出一流的銷售文案?

※超省錢租車方案

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

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

※回頭車貨運收費標準

中國駕校都教會了我們什麼?一出門就狗帶了

5萬元左右。為毛人家德國高速路上如果出現什麼事故,救護車都能第一時間暢通無阻的到達現場,車子都會讓出一條路來,看看人家要上的課程吧。德國的考駕照流程,也是分為理論和路考的,3測試、理論課、駕駛課、除此之外還要參加急救培訓課程。

從駕校畢業出來的孩子

你們是否覺得教練最厲害的地方

其實不是他們的技術有多叼

而是他們是比費玉清還要厲害的黃段子

從他們身上你能學到最多的就是說段子

話說國內的駕校都是要經過交通部門管理的,負責監考的也是交管部門,照理來說,強強聯手,門下出來個個都是優秀畢業生。

可是偏偏上路后就出現一些令人驚訝的各種奇葩事情。

收費那麼貴,教出來的是小學生?首先個人角度看,中國駕校的收費算是比較合理的,畢竟一分錢一分貨。

什麼鬼,考完科目一了還他么分不清路牌標識,死記硬背拿了90分,最後還是都還給教練了。

尼瑪,為什麼這個車位我會倒不進去,明明這倒車方法在駕校學得挺6的啊!

長途開車上路訓練為毛都是一些比較偏僻的地方,教練說是比較少車,沒那麼危險,然後吃飯的時候轉臉就去飯店老闆那裡嘿嘿嘿了,回扣杠杠的,我就問一句以後上路我專挑車少的地方走嘛?

什麼,還掛科,叫你沒準備好禮物吧,你看人家誰誰誰買了煙就一次性通過了。

套路,都是套路啊,實際學到的東西並不多,靠得還是後天的積累。

都說德國駕照是世界上難考的幾本駕照之一,和中國到底有什麼差距呢,一起來探討一下吧!

首先看一下人家的教練車和我們的教練車有什麼不一樣,不必羡慕,畢竟人家的費用總共下來要1.5萬元左右。

為毛人家德國高速路上如果出現什麼事故,救護車都能第一時間暢通無阻的到達現場,車子都會讓出一條路來,看看人家要上的課程吧。

德國的考駕照流程,也是分為理論和路考的,3測試、理論課、駕駛課、除此之外還要參加急救培訓課程。

安全意識

在參加理論考試之前,參考人員必須去參加一場約10小時的急救課程,學會各種各樣的急救措施,而且在德國在遇到交通事故的時候,你是有義務要下車對傷者進行急救措施的。

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

【其他文章推薦】

※別再煩惱如何寫文案,掌握八大原則!

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

※超省錢租車方案

※教你寫出一流的銷售文案?

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

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

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

德系車居然被日系車幹掉?美國安全機構公布最安全轎車

5L自然吸氣,配搭的是CVT,但是油耗方面則意外地不如雅閣以及凱美瑞。日產西瑪官方指導價:23。48-26。78萬作為天籟的孿生兄弟,西瑪有着一個更為年輕的外觀,而在操控上也是往着運動這個方面走去。雖然舒適性有所降低,但整體還是相對優秀。

前言

安全始終買車的頭等大事,在購車的時候我們經常會考慮汽車的安全配置如何,而且會考慮汽車的實際碰撞成績,而除了我國的C-NAp以外,美國IIHS(美國高速公路安全保險協會)也是一個公正的測試機構,而最近曝光測試眾多車型燈光不及格的也是這個組織。而今年已經過了,那麼有那些車型是獲得了最高安全評定,獲得top safety pick+評定呢?

這次有着38款車型獲得了這個殊榮,而在我國有售的轎車車型就有以下車型:

雪佛蘭沃藍達

雪佛蘭沃藍達是在國際中頗具盛名的混動車型,不過採用的是增程式混動,也就是充電以及的用汽油發動機發電的方式提供電能,綜合油耗較低。不過較高的售價是制約它在國內發展的因素。

現代伊蘭特

官方指導價:9.98-15.18萬

這裏所說的伊蘭特並不是說那個老掉牙的伊蘭特,而是我國的領動。這一款緊湊型轎車不僅顏值高,而且1.4T以及雙離合變速箱帶來的油耗表現相當不錯,但就是雙離合常見的頓挫還是有所表現。

馬自達3昂克賽拉

官方指導價:11.49-15.99萬

馬自達3昂克賽拉有着超高的顏值,以及在操控或者說是駕駛樂趣上有着不低的造詣,深受年輕人的喜愛。不過後排空間相對較小,這對於一些家庭用戶來說只能是夠用的地步,和着它2700mm軸距所不符。

豐田卡羅拉

官方指導價:10.78-17.58萬

卡羅拉對於豐田來說一直都是走量的車型,全球銷售量高。原因就是很好地保持了豐田家用車價格低廉,質量可靠的特點,而且後排空間極其優秀,對於家庭用戶來說非常適合。但就是外觀內飾上稍顯中庸,年輕人應該會喜歡更年輕的豐田雷凌。

馬自達6阿特茲

官方指導價:17.58-23.98萬

阿特茲和昂克賽拉一樣都是使用了“魂動”設計以及“創馳藍天”技術,所以顏值高、低油耗以及優秀的操控成為了標配。在之前的改款中還終於對之前備受詬病的內飾進行了改良,終於和外觀相適應。

日產天籟

官方指導價:17.58-23.88萬

天籟一直都有着“移動沙發”之稱,不僅僅是沙發的舒適程度,還有底盤的舒適程度都可以說是在同價位中出類拔萃的。動力方面則是有着2.0以及2.5L自然吸氣,配搭的是CVT,但是油耗方面則意外地不如雅閣以及凱美瑞。

日產西瑪

官方指導價:23.48-26.78萬

作為天籟的孿生兄弟,西瑪有着一個更為年輕的外觀,而在操控上也是往着運動這個方面走去。雖然舒適性有所降低,但整體還是相對優秀。不過在我國較高的售價是一個邁不過去的門檻。

斯巴魯力獅

官方指導價:21.98-29.98萬

斯巴魯在我國始終是一個比較小眾的品牌,這和它並沒有在我國實現國產有着很大的關係。但是它價格以及競爭力是不容小覷的,2.5L車型起售價也是22萬不到,作為一款進口車性價比頗高。不過筆者更希望能看到它的在我國實現量產。

豐田凱美瑞

官方指導價:18.48-32.98萬

對於凱美瑞相信大家都非常熟悉了,它的特點就是油耗低故障率低,在空間表現上還相當不錯。唯獨是中庸外觀確實不能讓年輕消費者感冒。

奧迪A4

官方指導價:29.98-43.00萬

新一代奧迪A4不僅性能更強,而且外觀上更寬更低矮,看起來更動感。可以說是今年最受歡迎的豪華中型車。

雷克薩斯ES

‍官方指導價:29.80-65.40萬

雷克薩斯ES作為日系豪車的代表,駕駛非常輕便,整體屬於不錯的水準,對於追求精緻感和豪華感的消費者來說ES是個不錯的選擇。

沃爾沃S60/V60

‍官方指導價:26.69-63.69萬

沃爾沃關於安全方面的知識儲備以及技術儲備還是豐厚的。也是這樣做出了這兩款車型,可以說是旅行版以及三廂版車型。

全文總結:IIHS評出的這些最安全車型中主要還是大家能夠買得起的車型,這些車型中日系車居多也能夠說明一定的問題,不過考慮到中外的車型還是會有一些差異,因此這份榜單也僅供參考,汽車的安全性只是其次,安全首先還是在於自身養成良好的駕駛習慣和安全意識。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※教你寫出一流的銷售文案?

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

※回頭車貨運收費標準

※別再煩惱如何寫文案,掌握八大原則!

※超省錢租車方案

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

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