「福島套餐」:奧運選手的被曝風險 民團仍訴求停辦東奧(下)

3{icon} {views}

文:宋瑞文(媽媽監督核電廠聯盟特約撰述)

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

【其他文章推薦】

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

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

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

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

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

※回頭車貨運收費標準

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

澳彩虹鎮BOM雷達站 助農民掌握天氣變化

3{icon} {views}

摘錄自2020年5月15日公視報導

澳洲農業重鎮維多利亞省的西部小鎮「彩虹」,日前正式啟用聯邦氣象局設置的農業雷達站,讓當地農民可以更快獲得更準確的氣象資訊。

遠遠看去就像是一顆大型的高爾夫球放在發球點上,它是澳洲聯邦氣象局BOM,在全國設立的幾十座農業氣象雷達站中,最新啟用的一個。在這個球體的內部,有個全天候360度旋轉的碟型天線,是這款C波段雷達的靈魂。

由於利用都卜勒效應,雷達除了能判斷雲雨帶的強度與位置,還可以算出移動的方向跟速度,換言之,雷達站周邊的農場何時會受到雲雨帶影響,以及影響持續的時間,都可以算出來。聯邦氣象局的雷達站網路,成為農民們拿捏農作時間點最重要的依靠。

生活環境
全球變遷
氣候變遷
國際新聞
澳洲
雷達站
氣象

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

【其他文章推薦】

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

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

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

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

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

※回頭車貨運收費標準

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

疫情影響 全球10萬名遊輪船員仍漂流海上 出現心理健康危機

3{icon} {views}

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

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

【其他文章推薦】

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

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

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

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

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

※回頭車貨運收費標準

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

17萬起買個性SUV,這款美系SUV是不是真的比奇駿更值得買?

7{icon} {views}

但對於指南者來說,2706mm的軸距絕對是碾壓它的2636mm軸距。日產逍客官方指導價:13。98-18。98萬此次指南者真正對手應該是逍客,但是1。4T的發動機註定是和2。0L發動機相對比的,動力方向相差無幾,不過在軸距上逍客以着10mm的距離小勝指南者。

前言

對於美系車,我們一向都有着這樣的認識,隔音好而且舒適,但價格水平卻一點都不接地氣。但是最近作為硬派SUV代表品牌的JEEp公布了最新款的指南者售價,價格竟然和一向走低價路線的日系車一樣,那麼這款jeep指南者究竟何方神聖?是否值得買呢?

Jeep指南者車身尺寸為4415*1819*1625,身材上要比起奇駿、CR-V這些對手要小上一圈。定位是一款緊湊型SUV,預售價為17到24萬之間。

外觀上非常硬朗霸氣,整體和大切諾基相似,採用了家族式的7孔進氣格柵,並且在視覺上和大燈融為一體,拉伸了整車的視覺寬度。

整車下部有着一圈塑料裝飾,可以避免小蹭刮后的補漆。車尾造型相對於以往車型來說要柔性不少,兩燈之間依然是大大的“jeep”的標識。

內飾方面則是一貫的jeep風格,比較的中庸沒有太大的特點,使用的是黑色以及米色相搭配的風格,更為適合家用以及溫馨。配置上可以看到有着自動空調、8.4英寸中控屏幕、电子手剎、一鍵啟動以及全景天窗。

在動力方面,指南者將採用的是1.4T渦輪增壓發動機或者2.4L自然吸氣發動機,前者將搭配7速雙離合變速箱,後者將搭載9AT變速箱,並且為四驅車型。

競爭對手

日產奇駿

官方指導價:18.18-26.78萬

日產奇駿在緊湊型SUV中是一個重量級选手,實力不容小覷,油耗以及空間表現優秀,不過隔音水平以及內飾用料稍顯一般。但對於指南者來說,2706mm的軸距絕對是碾壓它的2636mm軸距。

日產逍客

官方指導價:13.98-18.98萬

此次指南者真正對手應該是逍客,但是1.4T的發動機註定是和2.0L發動機相對比的,動力方向相差無幾,不過在軸距上逍客以着10mm的距離小勝指南者。

本田繽智

官方指導價:12.48-18.48萬

本田繽智是一款小型SUV,和指南者相比其實不公平,但是高配的1.8L車型價格已經和指南者相重合了,所以依然可以說是競爭對手。因為等級的關係,繽智的2610mm軸距,明顯不如指南者,而且1.8L發動機在動力上是不如1.4T發動機的,不過本田該發動機卻是更省油。

所以總的來說,這次指南者可以說是一款入門緊湊型SUV,是和着日產逍客這種定位相似。比起本田繽智以及昂科拉這類小型SUV要大上一圈,但是卻小於日產奇駿、本田C-RV這類緊湊型SUV。這次指南者上市,因為低配搭配的是1.4T發動機,售價難以下降,所以相當於是用着高配和別人競爭。這款指南者非常適合追求個性的年輕人使用,唯一就是價格應該再下降一點。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

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

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

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

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

※超省錢租車方案

※回頭車貨運收費標準

南非野生動物交易黑市 高價賣往中國的真相:淪落動物園、實驗室、肉品市場

2{icon} {views}

環境資訊中心外電;姜唯 翻譯;林大利 審校;稿源:ENS 編按:接續
上篇,近期一份報告「南非與中國間可恥的野生動物貿易」揭露南非政府放任野生動物活體市場、違反國際公約的真相。報告由南非非政府組織「EMS基金會」和「禁止動物貿易(Ban Animal Trading)」發表,他們指控,包括黑猩猩、孟加拉虎、狼、非洲野犬和獅子在內,數千種瀕臨滅絕的野生動物從南非銷往中國,法規和審核流程毫無作用、動物福利和自然保護原則遭到忽視,並提供確切犯罪證據。

動物福利問題

雖然瀕危物種貿易公約(CITES)應該保證出口的野生動物到達「適當和可接受的目的地」,但從南非銷往中國的野生動物最終可能成為寵物、古董、食品、傳統藥材、動物園展示動物或實驗動物。

報告指出,由於許多動物是由最初的進口商出售給未知的第三方,通常無法確定其最終目的地。

在中國,進口野生動物的飼養設施通常品質不良。以出售給北京野生動物公園的黑猩猩為例,牠們抵達中國時,籠舍等設施還沒完工,也沒有合格的員工來照顧牠們。

來自南非的黑猩猩被關在北京野生動物公園中狹窄的展示空間內。
報告截圖

這些動物中有許多是為了娛樂目的而運往中國成千上萬個公有或私有「野生動物園」、主題公園和馬戲團。根據該報告,其中有些機構涉嫌虐待動物、環境設備條件惡劣、訓練野生動物表演以及非法購買野生動物。

從南非出口的大多數非靈長類動物,包括數百隻狨屬猴子,是賣給中間商、批發商和繁殖場,最終進入會執行活體切片的生物醫學、化妝品和製藥實驗室。

道德破產的政策

報告中提供的證據清楚地顯示,南非的野生動物貿易沒有任何保育作用。加上牽涉到瀕危物種,中國的最終目的地大多很可疑以及貿易活動刺激需求成長,這條供應鏈對生物多樣性和物種生存的影響,比較可能是弊遠大於利。

這個產業的真正動機並不難發現。根據這份報告,一間南非公司出於所謂非商業目的向一間中國公司出口的18隻黑猩猩,價格超過750萬南非幣(約新台幣1287萬元),100隻狐獴的行情價格為60萬南非幣(約新台幣102萬元),57頭長頸鹿700萬南非幣(約新台幣1201萬元)和18隻非洲野犬100萬南非幣(約新台幣171萬元)。

多年來,南非政府一直在積極推動這個獲利導向的行業,無視CITES及其自己的出口法規,還大力推廣「永續利用」,將野生動物視為養殖和出口商品,將保育責任推給國際市場。

100隻狐獴的行情價格為60萬南非幣(3萬4460美元)。照片來源:Jarod Carruthers(CC BY-NC-ND 2.0)

EMS基金會負責人皮克佛(Michele Pickover)表示,這份報告的前一個版本已經寄給南非各相關政府部門和官員,裡面有清楚的非法獅骨貿易證據,「但我們從未收到任何人的任何回應,這不是無能,是無視。」

考慮到武漢肺炎(COVID-19)危機,忽視貿易問題將牽涉刑事責任。南非政府若繼續支持和合法化這個危害國內生態系統和生物多樣性的產業,就是使全世界暴露於新型人畜共通傳染病的風險,就應對相關生態破壞、人類健康和財務後果承擔某些責任。

作者呼籲南非政府放棄有爭議的野生動植物貿易政策,並禁止出口活體野生動物及其身體部位。

「報告明確指出,任何人工繁殖和貿易都使消費合法化和常態化,影響減少需求的呼籲互相矛盾,使野生物種面臨進一步開發的風險。」

作者呼籲用新的全球協議代替CITES,以「野生動物貿易不適當、適得其反、不道德和根本非永續」為基本指導原則。

South Africa’s Live Wild Animal Trade to China Exposed CAPE TOWN, South Africa, May 26, 2020(ENS)

Animal Welfare Concerns

While CITES rules are supposed to guarantee that exported live wild animals go to “appropriate and acceptable destinations,” those traded from South Africa to China may end up being used as pets, curios, food, ingredients in traditional medical practices, zoo exhibits or laboratory test subjects.

The report notes that since many animals are sold on to unknown third parties by the initial importers, their final destination is frequently impossible to ascertain.

Facilities housing imported wild animals in China are often of an inferior standard. In the case of the chimpanzees sold to the Beijing Wild Animal Park, for example, their accommodation was not yet completed on their arrival in the country and the facility did not have qualified staff to take care of them.

Many of the animals are destined for China’s thousands of government-run or privately-owned “safari parks,” zoos, theme parks and circuses for the sole purpose of entertainment. According to the report, several of these institutions have been exposed for animal abuse, poor conditions and facilities, training wild animals to perform for audiences and illegally buying wild-caught animals.

Most of the non-human primates exported from South Africa, including hundreds of marmosets, are sold to brokers, wholesalers and breeding farms, and many of them end up in laboratories conducting experiments, including vivisection, for the biomedical, cosmetic and pharmaceutical industries.

Morally Bankrupt Government Policies

The evidence presented in the report makes it abundantly clear that South Africa’s trade in live wild animals has no conservation value whatsoever. Given the involvement of endangered species, the frequently dubious final destinations in China and the fact that the trade stimulates growing demand, it’s more likely to have a detrimental impact on biodiversity and species survival.

The true motivation for this industry is not hard to find. The 18 chimps exported from a commercial entity in South Africa for supposedly non-commercial purposes to a commercial entity in China came at a cost of over R7.5 million (US$430,758). The report lists the going price for 100 meerkats at R600,000 (US$34,460), 57 giraffes at R7million (US$402,000) and 18 African Wild Dogs at R1 million (US$57,430).

The South African government has been actively enabling this profit-driven industry for years. It has done so through its laissez-faire disregard for CITES and its own export regulations and through its aggressive promotion of a “sustainable use” philosophy that treats wild animals as mere commodities to be bred and sold while leaving conservation concerns to the supposed benevolence of international markets.

According to Michele Pickover, director of the EMS Foundation, copies of an earlier and equally damaging EMS/Ban Animal Trading report on South Africa’s trade in lion bones clearly detailing illegal activities was sent to various domestic authorities and individuals in government.

“We never received any response from any of them,” Pickover says. “This is not a case of incompetence. They are ignoring us.”

Given the COVID-19 disaster, ignoring this issue amounts to criminal negligence. As long as the South African government continues to support and legitimise an industry that endangers the biodiversity of domestic ecosystems while exposing the entire world to novel zoonotic diseases, it bears some responsibility for the devastating ecological, human health and financial consequences it causes.

The authors call for the government to abandon its controversial wildlife trade policies and to ban the export of living wild animals and their body parts.

They write, “The report makes clear that any captive breeding and trade legitimises and normalises consumption, which renders demand reduction campaigns incoherent and ineffective, and puts wild species at further risk of exploitation.”

The authors call for the replacement of CITES with a different global agreement that would have as its fundamental guiding principle that “the trade in wild animals is inappropriate, counter-productive, unethical and fundamentally unsustainable.”

※ 全文及圖片詳見:ENS

出售野生動物
CITES
走私
活體動物
動物福利
道德
國際新聞
南非
美國
生態保育
生物多樣性

作者

姜唯

如果有一件事是重要的,如果能為孩子實現一個願望,那就是人類與大自然和諧共存。

林大利

於特有生物研究保育中心服務,小鳥和棲地是主要的研究對象。是龜毛的讀者,認為龜毛是探索世界的美德。

延伸閱讀

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

【其他文章推薦】

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

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

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

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

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

※超省錢租車方案

※回頭車貨運收費標準

9萬起能買的“德系”SUV?這車上市后能比肩哈弗H6嗎

1{icon} {views}

而且中控也採用銀色材質的裝飾。包括方向盤也運用了鋼琴烤漆做細節點綴,所以整個內飾給人一種比較有檔次感的體驗。競爭對手分析:銷量之王 哈弗H6指導價:8。88-16。28萬作為常年的SUV銷量冠軍,哈弗H6和新景逸X5一樣很注重其內飾用料和設計做工等方面。

日前,東風風行官方發布信息,全新的景逸X5將會在今年12月17日正式上市!在幾天後,這款SUV車型就會公布它的正式售價以及詳細配置信息。

下面我們就深入了解一下這款車型,還有看看它和主要對手的差別!

新景逸X5採用三橫幅鍍鉻前格柵設計,這讓它視覺效果很寬,格柵和大燈連為一體。看起來的確時尚、漂亮,雖然有些德系SUV的影子,不過它看着很大氣,車身也顯大,這顯然是消費者比較喜歡的設計類型。

側面和尾部的設計稜角分明,視覺效果偏厚重。車尾造型比較具有層次感,其尾燈加入了LED光源,另外排氣採用了雙邊共兩出的布局形式。

其實,它採用了LQ-CMF平台的技術,具體體現在它採用了前副車架加強梁和前懸架鋁合金上擺臂等細節。所以比起老款車型,它的變化真的很大。

動力方面,根據目前的信息來看,景逸X5將會搭配1.6L、2.0L兩款自然吸氣發動機。而傳動方面將採用5擋手動或CVT變速箱!同級別車型大多採用了小排量增壓發動機,所以景逸X5的推出還是要進行差異化競爭。

在內飾方面,它的整體設計、材質運用可能會給你一種驚艷的感覺。懸浮式中控屏、整體貫穿式空調出風口,看上去比較時尚。而且中控也採用銀色材質的裝飾。

包括方向盤也運用了鋼琴烤漆做細節點綴,所以整個內飾給人一種比較有檔次感的體驗。

競爭對手分析:

銷量之王 哈弗H6

指導價:8.88-16.28萬

作為常年的SUV銷量冠軍,哈弗H6和新景逸X5一樣很注重其內飾用料和設計做工等方面。而H6主力車型採用1.5T+6AT/6MT的動力總成。另外哈弗H6的銷售渠道建設程度很高,這方面的優勢較大。

優質自主車 傳祺GS4

指導價:9.98-16.18萬

堅持自主研發的傳祺GS4,銷量也表現強勢,頗有些爆款車型的感覺。它的設計年輕、前衛,也具有自我特色。所以新景逸X5上市后的表現,需要大家多多關注!

編者語:

新景逸X5比起老款車型有了翻天覆地般的變化,9-12萬的預售價不算低,所以在正式上市后的正式售價我估計會定在8.3-11.5萬左右,畢竟它要用更高的性價比和哈弗H6競爭!本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

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

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

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

※回頭車貨運收費標準

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

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

這輛只要8萬起的車 頂級建築師和低調富二代都買

1{icon} {views}

5L地球夢科技發動機,可以爆發出131匹強勁馬力,無論是起步加速還是中後段加速,全新鋒范的動力響應都表現的非常迅速,百公里10。2秒的加速時間更是在同級中名列前茅,滿足了年輕人的駕駛慾望。這樣的動力總成和強勁的加速性能和無論是對男主角時光,還是對很多追求速度的年輕人來說,都是很有吸引力的。

你難以靠近難以不再想念

我難以抗拒你容顏

把心畫在寫給你的信中

希望偶爾能夠見到你微笑的容顏

……

當這首熟悉的《難以抗拒你容顏》在電視里響起時,應該有無數人跟着哼唱了吧。沒錯,小編說的就是最近火爆的電視劇《咱們相愛吧》里女主之一蔡春娜在KTV里唱這首歌以至潸然淚下的劇情。這首歌勾起了她與劇中前男友的回憶,又何嘗沒有勾起大家對青春的回憶呢,簡直經典啊!所以這部劇紅也不是沒有道理,不僅身邊上至80歲跳廣場舞的阿姨下至18歲青春活潑的姑娘都沉迷其中,各大視頻網站也都佔據熱搜。

只見地鐵哪怕擠成狗,都有不少人堅決舉起手機在看;公司中午休息,女同事沉迷於劇情飯都顧不上吃;就連晚上跳廣場舞的大媽都提前結束回家追劇了。在好奇心的驅使下,小編也跟着看了起來。

而八點檔電視劇總有一種迷の魅力,一旦靠近就不可自拔。結果你們也猜到了,基本上是這樣的↓↓↓

但是!小編當然不是一個沉迷追劇不務正業的人,生活在哪裡汽車就在哪裡,電視看着看着就自然對裏面出現的汽車更關心一點,今天就來給大家八一八這部劇里出現頻率頗高的轎車——全新鋒范。

在劇里,它是男主角時光以及大毛的座駕,而兩位車主一個是著名的建築設計師,一個則是深藏不露的富二代,都不是“一般人”。 生活中小編身邊不少全新鋒范車主,也都是優質青年,可見這輛車對高品位人群的吸引力。

男主角時光作為一位建築設計師,對外觀的要求絕不會低。全新鋒范的外觀設計,恰恰符合了他的要求。飛翼式前臉突出凌厲與飽滿,車身上下雙腰線簡潔幹練,輪廓鮮明。翹起的尾部採用寬大設計,搭配鑽石切割的后尾燈組合,顯得動感又不失時尚。這種簡約不簡單的風格,與很多現代建築也是交相呼應的。

內飾未來感十足,布局層次分明。簡潔大氣的儀錶盤與中央的中控大屏、觸控式智能空調營造出科技感十足的駕駛氛圍,恍惚間會讓你覺得是在開一輛“未來之車”。

當然,全新鋒范的動力應該也是男主角時光選擇它的重要原因。這樣一個在生活中方方面面都追求完美的霸道總裁對動力也不會妥協。好在全新鋒范搭載的是本田1.5L地球夢科技發動機,可以爆發出131匹強勁馬力,無論是起步加速還是中後段加速,全新鋒范的動力響應都表現的非常迅速,百公里10.2秒的加速時間更是在同級中名列前茅,滿足了年輕人的駕駛慾望。這樣的動力總成和強勁的加速性能和無論是對男主角時光,還是對很多追求速度的年輕人來說,都是很有吸引力的。

而劇中另外一位開全新鋒范的主角大毛,一開始只是一個默默喜歡女主角芝芝的上班族,沒想到最後才知道,他的父親其實是有名的商人。

但大毛對此顯得不以為意,依舊每天開着一輛紅色全新鋒范靠自己的努力打拚一番事業。其實除掉富二代這個身份后,大毛和現在眾多打拚的年輕人並沒有區別,相比華而不實的超跑,一輛十萬級別,經濟適用的轎車反而才是事業上最大的助力。

與全新鋒范1.5L地球夢科技發動機相匹配的是支持自動啟停功能的CVT無級變速箱,平順、有力的換擋過程為駕駛者帶來暢快的加速體驗以及低至5.4L的百公里油耗表現。如此經濟的表現對於年輕人來說更是大大減輕了用車壓力。並且全新鋒范搭載了時下先進的科技配置,中控7英寸多功能互聯显示系統使車型氛圍充滿了未來感,除了可與多種主流手機型號連接並同步操作以外,屏幕內還集成了先進的三模式倒車影像,為駕駛者提供了一個清晰、直觀的後方視角,使車輛在倒車時更有安全保障。全新鋒范強大的功能配置以及突出的性價比,堪稱生活好幫手、創業好夥伴,難怪能成為了大毛的選擇。

綜合來看,決意東山再起的時光與憑藉自身努力創業的大毛選擇全新鋒范作為座駕再適合不過,外觀內飾極具現代感,高科技配置豐富,低油耗高動力,一切都恰好滿足年輕人的需求。並且不久前的廣州車展上,廣汽本田又推出了2017款鋒范1.5L CVT精英版,新增多達7項配置,使得外觀造型與實用性上都得到了更好的提升。在外觀上加入了15寸鋁質輪轂與後置短天線。在實用性方面加入了對於如今年輕人來說不可或缺的無鑰匙進入/一鍵啟動功能,靠近車門自動解鎖,出發前的系列動作一氣呵成,說不出的瀟洒與帥氣。而後排出風口的出現,在讓所有坐上你車的人都能得到享受的同時,更是使得整輛車達到了越級的表現。

2017款鋒范1.5L CVT精英版的官方指導價為9.58萬元。如此豐富的配置,售價卻未超出10萬,再加上即將結束的購置稅減半政策,性價比在同級車型中非常突出,可見廣汽本田的十足誠意。所以十萬級合資轎車中,2017款鋒范不失為一個上上之選。

追劇的同時不忘給大家推薦車型,小編感覺自己今天一米八!本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

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

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

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

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

※超省錢租車方案

※回頭車貨運收費標準

香港環團呼籲 支援回收廢棄塑膠

5{icon} {views}

摘錄自2020年6月22日蘋果日報香港報導

香港政府近年力倡回收減廢,惟廢塑膠回收率每況愈下。垃圾徵費遲未通過,有環保團體促加快落實中央回收廢棄塑膠、加強社區回收網,同時加快推出「飲品塑膠瓶生產者責任計劃」,提高回收率。

香港環保廢料再造業總會會長劉耀成,在大埔工業邨設廠回收、再造塑膠瓶,年底投入運作,劉批評政府沒提供經濟誘因,吸引前線人員回收廢棄塑膠。

他指出,香港2018年PET塑膠瓶每日平均棄置量達139噸,若被棄置的塑膠瓶得以回收,可讓至少五間塑膠廠房生存。香港環保署回覆指,政府今年下半年將就塑膠飲料容器推展生產者責任計劃進行公眾諮詢,並會視「塑膠可回收物料回收服務先導計劃」成效,考慮長遠將服務擴展至全港。

公害污染
污染治理
國際新聞
香港
一次性塑膠製品
回收
廢棄物

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

【其他文章推薦】

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

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

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

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

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

※回頭車貨運收費標準

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

掌握SpringBoot-2.3的容器探針:深入篇

2{icon} {views}

歡迎訪問我的GitHub

https://github.com/zq2599/blog_demos

  • 內容:原創分類匯總及配套源碼,涉及Java、Docker、K8S、DevOPS等

關於《SpringBoot-2.3容器化技術》系列

  • 《SpringBoot-2.3容器化技術》系列,旨在和大家一起學習實踐2.3版本帶來的最新容器化技術,讓咱們的Java應用更加適應容器化環境,在雲計算時代依舊緊跟主流,保持競爭力;
  • 全系列文章分為主題和輔助兩部分,主題部分如下:
  1. 《體驗SpringBoot(2.3)應用製作Docker鏡像(官方方案)》;
  2. 《詳解SpringBoot(2.3)應用製作Docker鏡像(官方方案)》;
  3. 《掌握SpringBoot-2.3的容器探針:基礎篇》;
  4. 《掌握SpringBoot-2.3的容器探針:深入篇》;
  5. 《掌握SpringBoot-2.3的容器探針:實戰篇》;
  • 輔助部分是一些參考資料和備忘總結,如下:
  1. 《SpringBoot-2.3鏡像方案為什麼要做多個layer》;
  2. 《設置非root賬號不用sudo直接執行docker命令》;
  3. 《開發階段,將SpringBoot應用快速部署到K8S》;

前文回顧

  1. 本文是《掌握SpringBoot-2.3的容器探針》系列的第二篇,前文 《掌握SpringBoot-2.3的容器探針:基礎篇》知道了kubernetes的存活和就緒探針,以及SpringBoot-2.3的actuator新增的兩個endpoint,當我們把應用部署到kubernetes環境時,這些知識讓我們能配置出官方推薦的探針方案,如下圖:
  1. 儘管上述配置已經可以覆蓋多數場景,依然有三個問題未解決:
  • 首先,SpringBoot為kubernetes提供了兩個actuator項,但是那些並未部署在kubernetes的SringBoot應用呢?用不上這兩項也要對外暴露這兩個服務地址嗎?

  • 其次,就緒探針是什麼時候開始返回200返回碼的?應用啟動階段,業務服務可能需要一段時間才能正常工作,就緒探針要是提前返回了200,那k8s就認為容器可以正常工作了,這時候把外部請求調度過來是無法正常響應的,所以搞清楚就緒探針的狀態變化邏輯很重要;

  • 最後,也是最重要的一點:有的場景下,例如外部依賴服務異常、本地全局異常等情況下,業務不想對外提供服務,等到問題解決后業務又可以對外提供服務了,如果此時我們能自己寫代碼控制就緒探針的返回碼,那就做到了控制kubernetes是否將外部請求調度到此容器上,這可是個很實用的功能!

本篇就是為了解決上述問題而作,這些問題解決后才能用好探針技術,讓它在容器環境帶來更大價值;

關鍵知識點

解決上述問題的關鍵集中在以下幾個知識點:

  1. SpringBoot對容器環境的判斷;
  2. SpringBoot對狀態定義;
  3. 獲取狀態;
  4. 監聽狀態;
  5. 修改狀態;

接下來挨個學習這些知識點;

SpringBoot對容器環境的判斷

  1. 官方文檔如下圖所示,SpringBoot判斷是否是kubernetes環境的邏輯很簡單:是否有_SERVICE_HOST_SERVICE_PORT這兩個環境變量:

  2. 熟悉kubernetes的讀者看到_SERVICE_HOST”_SERVICE_PORT,應該會想起KUBERNETES_SERVICE_HOSTKUBERNETES_SERVICE_PORT,這是k8s給pod中配置的環境變量,看來SpringBoot也是針對k8s的這個規則來判定是否是容器環境的(如果將來k8s的某個版本不給pod設置這個環境變量,那些原本可以正常運行的pod豈不是有危險了?);

  3. 接下來通過實踐來驗證上述規則是否有效;

  4. 創建一個SpringBoot-2.3.0.RELEASE的應用,其pom.xml中的parent信息如下:

<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.3.0.RELEASE</version>
  <relativePath/>
</parent>
  1. 增加actuator依賴:
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
  1. 啟動該應用,瀏覽器訪問:http://localhost:8080/actuator/health/liveness,返回404錯誤:
  1. 以上返回是符合預期的,因為此時並非在kubernetes環境,接下來將”_SERVICE_HOST_SERVICE_PORT這兩個環境變量加入應用進程,看看是否有變化;
  2. 如下圖,編輯啟動類的配置信息:
  1. 點擊下圖紅框位置,即可進入編輯環境變量的窗口:
  1. 新的窗口中,操作如下圖紅框中所示,新增了兩個環境變量:
  1. 再次運行程序,這次返回的狀態碼是200:
  1. 至此,我們弄明白了SpringBoot是否開啟探針的邏輯,即應用是否運行在容器環境,而是否是容器環境的判定邏輯則是_SERVICE_HOST_SERVICE_PORT這兩個環境變量是否存在;

非kubernetes環境開啟探針

/actuator/health/liveness/actuator/health/readiness在kubernetes環境才會開啟,但是一般情況下,在開發階段SpringBoot應用可能運行在自己的電腦上,此時如果想查看這兩個接口的返回值有兩種方式:

第一種,就是前面提到的添加_SERVICE_HOST_SERVICE_PORT這兩個環境變量,讓SpringBoot以為當前環境是kubernetes環境;

第二種,是按照官方指導添加屬性,如下圖紅框所示:

SpringBoot對探針相關狀態定義

  1. 首先要弄清楚有哪些狀態,源碼是最準確的;
  2. 如下圖,存活探針一共有兩種狀態:CORRECT表示應用運行中並且內部狀態正常,BROKEN表示應用運行中並且內部是BROKEN狀態(請原諒我的英語水平)
  1. 如下圖,就緒探針一共有兩種狀態:ACCEPTING_TRAFFIC表示應用可以對外提供服務,REFUSING_TRAFFIC表示應用無法對外提供服務;
  1. 另外,上圖的since註解显示這兩個枚舉是從2.3.0版本開始生效的;

  2. 小小八卦一下,上述兩個枚舉的作者Brian Clozel,坐標法國里昂,目前在sringboot的提交次數排第8名:

  1. 在SpringBoot啟動過程中,應用、存活探針、就緒探針三者狀態對應關係如下圖:
  1. 在SpringBoot停止過程中,應用、存活探針、就緒探針三者狀態對應關係如下圖:

獲取狀態

如果業務應用想獲取當前的存活和就緒狀態,將ApplicationAvailability接口autowire進來即可,下一篇《實戰篇》會有詳細的使用方式,這裏看下關鍵代碼:

監聽狀態

得益於Spring完整的事件發布和訂閱機制,業務應用通過EventListener註解就能監聽到存活和就緒狀態的變化,在EventListener註解修飾的方法中寫入必要的業務代碼即可實現狀態監聽,下一篇《實戰篇》會有詳細的使用方式,這裏看下關鍵代碼:

修改狀態

  1. 修改狀態,尤其是就緒狀態,這應該是我們最關注的功能了,在某些業務場景下,應用無法對外提供服務,這時候我們希望K8S不要將外部請求調度到這裏,如果K8S通過就緒探針收到返回碼非200,就不再將請求調度到這個pod上;
  2. 下一篇《實戰篇》會有詳細的代碼介紹,這裏給出關鍵代碼作為參考:

請注意

重要的事情一定要強調:咱們修改狀態的最終目的,不是為了取得applicationAvailability.getReadinessState()返回新的枚舉對象,而是要改變/actuator/health/readiness接口的返回碼(就緒是200,未就緒是503),這是kubernetes的探針規則要用到的;

為啥都放在下一篇

  1. 文章看到這裏您可能已經火冒三丈了:關鍵代碼都貼出來了,為啥不在本章給出完整源碼?騙點擊量?湊字數?湊文章數?
  2. 存活和就緒探針是在kubernetes環境下的工具,為了給您提供盡量準確和完整的參考,所有的代碼和操作都必須在kubernetes環境完成調試才能發布,而且這些操作應該作為單獨章節,與當前的理論知識分開;
  3. 歡迎進入《實戰篇》,隨SpringBoot-2.3.0.RELEASE,一起在kubernetes世界暢遊;

歡迎關注我的公眾號:程序員欣宸

https://github.com/zq2599/blog_demos

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

【其他文章推薦】

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

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

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

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

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

※超省錢租車方案

※回頭車貨運收費標準

一文說通Dotnet Core的後台任務

6{icon} {views}

這是一文說通系列的第二篇,裏面有些內容會用到第一篇中間件的部分概念。如果需要,可以參看第一篇:一文說通Dotnet Core的中間件

一、前言

後台任務在一些特殊的應用場合,有相當的需求。

比方,我們需要實現一個定時任務、或周期性的任務、或非API輸出的業務響應、或不允許併發的業務處理,像提現、支付回調等,都需要用到後台任務。

通常,我們在實現後台任務時,有兩種選擇:WebAPI和Console。

下面,我們會用實際的代碼,來理清這兩種工程模式下,後台任務的開發方式。

    為了防止不提供原網址的轉載,特在這裏加上原文鏈接:https://www.cnblogs.com/tiger-wang/p/13081020.html

二、開發環境&基礎工程

這個Demo的開發環境是:Mac + VS Code + Dotnet Core 3.1.2。

$ dotnet --info
.NET Core SDK (reflecting any global.json):
 Version:   3.1.201
 Commit:    b1768b4ae7

Runtime Environment:
 OS Name:     Mac OS X
 OS Version:  10.15
 OS Platform: Darwin
 RID:         osx.10.15-x64
 Base Path:   /usr/local/share/dotnet/sdk/3.1.201/

Host (useful for support):
  Version: 3.1.3
  Commit:  4a9f85e9f8

.NET Core SDKs installed:
  3.1.201 [/usr/local/share/dotnet/sdk]

.NET Core runtimes installed:
  Microsoft.AspNetCore.App 3.1.3 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 3.1.3 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]

首先,在這個環境下建立工程:

  1. 創建Solution
% dotnet new sln -o demo
The template "Solution File" was created successfully.
  1. 這次,我們用Webapi創建工程
cd demo
% dotnet new webapi -o webapidemo
The template "ASP.NET Core Web API" was created successfully.

Processing post-creation actions...
Running 'dotnet restore' on webapidemo/webapidemo.csproj...
  Restore completed in 179.13 ms for demo/demo.csproj.

Restore succeeded.
% dotnet new console -o consoledemo
The template "Console Application" was created successfully.

Processing post-creation actions...
Running 'dotnet restore' on consoledemo/consoledemo.csproj...
  Determining projects to restore...
  Restored consoledemo/consoledemo.csproj (in 143 ms).

Restore succeeded.
  1. 把工程加到Solution中
% dotnet sln add webapidemo/webapidemo.csproj
% dotnet sln add consoledemo/consoledemo.csproj

基礎工程搭建完成。

三、在WebAPI下實現一個後台任務

WebAPI下後台任務需要作為託管服務來實現,而託管服務,需要實現IHostedService接口。

首先,我們需要引入一個庫:

cd webapidemo
% dotnet add package Microsoft.Extensions.Hosting

引入后,我們就有了IHostedService

下面,我們來做一個IHostedService的派生託管類:

namespace webapidemo
{
    public class DemoService : IHostedService
    {
        public DemoService()
        
{
        }

        public Task StartAsync(CancellationToken cancellationToken)
        
{
            throw new NotImplementedException();
        }

        public Task StopAsync(CancellationToken cancellationToken)
        
{
            throw new NotImplementedException();
        }
    }
}

IHostedService需要實現兩個方法:StartAsyncStopAsync。其中:

StartAsync: 用於啟動後台任務;

StopAsync:主機Host正常關閉時觸發。

如果派生類中有任何非託管資源,那還可以引入IDisposable,並通過實現Dispose來清理非託管資源。

這個類生成后,我們將這個類注入到ConfigureServices中,以使這個類在Startup.Configure調用之前被調用:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers();

    services.AddHostedService<DemoService>();
}

下面,我們用一個定時器的後台任務,來加深理解:

namespace webapidemo
{
    public class TimerService : IHostedService, IDisposable
    {
          /* 下面這兩個參數是演示需要,非必須 */
        private readonly ILogger _logger;
        private int executionCount = 0;

          /* 這個是定時器 */
        private Timer _timer;

        public TimerService(ILogger<TimerService> logger)
        
{
            _logger = logger;
        }

        public void Dispose()
        
{
            _timer?.Dispose();

        }

        private void DoWork(object state)
        
{
            var count = Interlocked.Increment(ref executionCount);

            _logger.LogInformation($"Service proccessing {count}");
        }

        public Task StartAsync(CancellationToken cancellationToken)
        
{
            _logger.LogInformation("Service starting");

            _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromSeconds(5));
            return Task.CompletedTask;
        }

        public Task StopAsync(CancellationToken cancellationToken)
        
{
            _logger.LogInformation("Service stopping");

            _timer?.Change(Timeout.Infinite, 0);
            return Task.CompletedTask;
        }
    }
}

注入到ConfigureServices中:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers();

    services.AddHostedService<TimerService>();
}

就OK了。代碼比較簡單,就不解釋了。

四、WebAPI後台任務的依賴注入變形

上一節的示例,是一個簡單的形態。

下面,我們按照標準的依賴注入,實現一下這個定時器。

依賴注入的簡單樣式,請參見一文說通Dotnet Core的中間件。

首先,我們創建一個接口IWorkService

namespace webapidemo
{
    public interface IWorkService
    {
        Task DoWork();
    }
}

再根據IWorkService,建立一個實體類:

namespace webapidemo
{
    public class WorkService : IWorkService
    {
        private readonly ILogger _logger;
        private Timer _timer;
        private int executionCount = 0;

        public WorkService(ILogger<WorkService> logger)
        
{
            _logger = logger;
        }

        public async Task DoWork()
        
{
            var count = Interlocked.Increment(ref executionCount);

            _logger.LogInformation($"Service proccessing {count}");
        }
    }
}

這樣就建好了依賴的全部內容。

下面,創建託管類:

namespace webapidemo
{
    public class HostedService : IHostedService, IDisposable
    {
        private readonly ILogger<HostedService> _logger;
        public IServiceProvider Services { get; }
        private Timer _timer;

        public HostedService(IServiceProvider services, ILogger<HostedService> logger)
        
{
            Services = services;
            _logger = logger;
        }

          public void Dispose()
        
{
            _timer?.Dispose();
        }

        private void DoWork(object state)
        
{
            _logger.LogInformation("Service working");

            using (var scope = Services.CreateScope())
            {
                var scopedProcessingService =
                    scope.ServiceProvider
                        .GetRequiredService<IWorkService>();

                scopedProcessingService.DoWork().GetAwaiter().GetResult();
            }
        }

        public Task StartAsync(CancellationToken cancellationToken)
        
{
            _logger.LogInformation("Service starting");

            _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromSeconds(5));
            return Task.CompletedTask;
        }


        public Task StopAsync(CancellationToken cancellationToken)
        
{
            _logger.LogInformation("Service stopping");

            _timer?.Change(Timeout.Infinite, 0);
            return Task.CompletedTask;
        }
    }
}

把託管類注入到ConfigureServices中:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers();

    services.AddHostedService<HostedService>();
    services.AddSingleton<IWorkService, WorkService>();
}

這樣就完成了。

這種模式下,可以根據注入的內容切換應用的執行內容。不過,這種模式需要注意services.AddSingletonservices.AddScopedservices.AddTransient的區別。

五、Console下的後台任務

Console應用本身就是後台運行,所以區別於WebAPI,它不需要託管運行,也不需要Microsoft.Extensions.Hosting庫。

我們要做的,就是讓程序運行,就OK。

下面是一個簡單的Console模板:

namespace consoledemo
{
    class Program
    {

        private static AutoResetEvent _exitEvent;

        static async Task Main(string[] args)
        
{
                /* 確保程序只有一個實例在運行 */
            bool isRuned;
            Mutex mutex = new Mutex(true"OnlyRunOneInstance", out isRuned);
            if (!isRuned)
                return;

            await DoWork();

                        /* 後台等待 */
            _exitEvent = new AutoResetEvent(false);
            _exitEvent.WaitOne();
        }

        private static async Task DoWork()
        
{
            throw new NotImplementedException();
        }
    }
}

這個模板有兩個關鍵的內容:

  1. 單實例運行:通常後台任務,只需要有一個實例運行。所以,第一個小段,是解決單實例運行的。多次啟動時,除了第一個實例外,其它的實例會自動退出;
  2. 後台等待:看過很多人寫的,在這兒做後台等待時,用了一個無限的循環。類似於下面的:
while(true)
{
    Thread.Sleep(1000);
}

這種方式也沒什麼太大的問題。不過,這段代碼總是要消耗CPU的計算量,雖然很少,但做為後台任務,或者說Service,畢竟是一種消耗,而且看着不夠高大上。

當然如果我們需要中斷,我們也可以把這個模板改成這樣:

namespace consoledemo
{
    class Program
    {

        private static AutoResetEvent _exitEvent;

        static async Task Main(string[] args)
        
{
            bool isRuned;
            Mutex mutex = new Mutex(true"OnlyRunOneInstance", out isRuned);
            if (!isRuned)
                return;

            _exitEvent = new AutoResetEvent(false);
            await DoWork(_exitEvent);
            _exitEvent.WaitOne();
        }

        private static async Task DoWork(AutoResetEvent _exitEvent)
        
{
            /* Your Code Here */

            _exitEvent.Set();
        }
    }
}

這樣就可以根據需要,來實現中斷程序並退出。

六、Console應用的其它運行方式

上一節介紹的Console,其實是一個應用程序。

在實際應用中,Console程序跑在Linux服務器上,我們可能會有一些其它的要求:

  1. 定時運行

Linux上有一個Service,叫cron,是一個用來定時執行程序的服務。

這個服務的設定,需要另一個命令:crontab,位置在/usr/bin下。

具體命令格式這兒不做解釋,網上隨便查。

  1. 運行到後台

命令後邊加個&字符即可:

$ ./command &
  1. 運行為Service

需要持續運行的應用,如果以Console的形態存在,則設置為Service是最好的方式。

Linux下,設置一個應用為Service很簡單,就這麼簡單三步:

第一步:在/etc/systemd/system下面,創建一個service文件,例如command.service

[Unit]
# Service的描述,隨便寫
Description=Command

[Service]
RestartSec=2s
Type=simple
# 執行應用的默認用戶。應用如果沒有特殊要求,最好別用root運行
User=your_user_name
Group=your_group_name
# 應用的目錄,絕對路徑
WorkingDirectory=your_app_folder
# 應用的啟動路徑
ExecStart=your_app_folder/your_app
Restart=always

[Install]
WantedBy=multi-user.target

差不多就這麼個格式。參數的詳細說明可以去網上查,實際除了設置,就是運行了一個腳本。

第二步:把這個command.service加上運行權限:

# chmod +x ./command.service

第三步:註冊為Service:

# systemctl enable command.service

完成。

為了配合應用,還需要記住兩個命令:啟動和關閉Service

# #啟動Service
# systemctl start command.service
# #關閉Service
# systemctl stop command.service

七、寫在後邊的話

今天這個文章,是因為前两天,一個兄弟跑過來問我關於數據總線的實現方式,而想到的一個點。

很多時候,大家在寫代碼的時候,會有一種固有的思想:寫WebAPI,就想在這個框架中把所有的內容都實現了。這其實不算是一個很好的想法。WebAPI,在業務層面,就應該只是實現簡單的處理請求,返回結果的工作,而後台任務跟這個內容截然不同,通常它只做處理,不做返回 — 事實上也不太好返回,要麼客戶端等待時間太長,要麼客戶端已經斷掉了。換句話說,用WebAPI實現總線,絕不是一個好的方式。

不過,Console運行為Service,倒是一個總線應用的絕好方式。如果需要按序執行,可以配合MQ服務器,例如RabbitMQ,來實現消息的按序處理。

再說代碼。很多需求,本來可以用很簡單的方式實現。模式這個東西,用來面試,用來講課,都是很好的內容,但實際開發中,如果有更簡單更有效的方式,用起來!Coding的工作是實現,而不是秀技術。當然,能否找到簡單有效的方式,這個可能跟實際的技術面有關係。但這並不是一個不能跨越的坎。

多看,多想,每天成長一點點!

今天的代碼,在:https://github.com/humornif/Demo-Code/tree/master/0012/demo

(全文完)

 

 

微信公眾號:老王Plus

掃描二維碼,關注個人公眾號,可以第一時間得到最新的個人文章和內容推送

本文版權歸作者所有,轉載請保留此聲明和原文鏈接

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

【其他文章推薦】

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

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

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

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

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

※超省錢租車方案