WordPress Hosting 架站空間精選,最多人推薦的五個國外虛擬主機方案

近年來因為使用 WordPress 架站的需求大增,一些虛擬主機也紛紛推出為 WordPress 特別設計的架站空間,通常被稱為 WordPress Hosting,強調以 WordPress 架站為主要考量,經過調校、最佳化且適合架設 WordPress 的主機環境,對於網站或部落格來說有更好的效能。當然,這也很可能只是虛擬主機商的噱頭,無論如何,我想就我個人接觸過的 WordPress Hosting 來做個簡單的彙整介紹,也提供給免費資源網路社群的讀者做為參考。

我之前在「無名搬家到自架 WordPress,我推薦的五個虛擬主機服務」一文介紹過了自行架站的好處,如果你覺得自架網站太麻煩、太花錢,後續維護需要花太多時間,最基本的是註冊一個網域名稱,這對於要長久耕耘網路內容的站長來說是個最棒的投資,至少未來當 BSP 平台發生變化,我們可以帶著這塊「招牌」另起爐灶,就不會造成太多問題。

本文要介紹、推薦一些專注於 WordPress 的虛擬主機空間,這些空間你可能都聽過,但或許不知道它有個專為 WordPress 提供的方案規格,價格可能比一般虛擬主機稍微高些,有些則會限制每個月的瀏覽次數,這些都是 WordPress Hosting 的特色,當然,如果你確定要使用 WordPress 來架站,這些空間相較於一般的虛擬主機來說會更加合適。

什麼是 WordPress Hosting?

說到 WordPress Hosting,也就是特別為 WordPress 設計的架站空間,最大的特色是針對該平台所打造的最佳化環境,如果有用 WordPress 架過網站的經驗,一定知道它雖然外表看起來樸實簡單,實際上要把網站調整到最佳狀態,是需要花非常多時間、下苦心研究,甚至投入更多成本才能達成。

但一般虛擬主機最大的問題是:使用者並沒有設定主機核心參數的權限。這使得要調整網站變得更為麻煩,且受限在既有的權限裡,倘若有個專為 WordPress 使用而調整、最佳化後的環境,就可以大幅省去這些問題,至少我們可以確保網站在這個主機上的運作是更快速、更有效率的,且在主機上大部分都是運作 WordPress,也會使環境更單純、更安全。

而這個空間,就是本文要介紹的 WordPress Hosting。

WordPress Hosting 有好多種,那一種適合你?

WordPress 架站空間的選擇很多,但大致可以分成兩大類型。

一種是本文要介紹的空間型態,類似於虛擬主機,但使用者必須自己架設 WordPress,且擁有 FTP 權限,也是比較適合入門、新手或普通網站站長使用。因為主機核心參數已經進行過調整、最佳化,更符合 WordPress 的需求,也就能提高 WordPress 網站效能,在架站後應該就能明顯感覺到跟一般虛擬主機的差異。

另一種則是專業型 WordPress Hosting,像是知名的 WP Engine,主要是提供一個「客製化」的 WordPress 環境,透過他們的技術重新改寫 WordPress ,使它的運作效能提升,降低負載等等。這類方案的價格普遍都高很多(主要是有人完整協助你管理 WordPress 核心部分),如果對於一般的網站,其實不太需要用到這樣的規格。

WordPress Hosting 可以升級嗎?

這個問題依照不同虛擬主機商的方案而定。有些 WordPress Hosting 會提供不同的規格來劃分價格,有些則是只有單一規格,在租用前可以先評估一下自己的需要,盡量在最節省成本的考量下取得最實惠的價格方案,就能把資金做最有效的運用。

如前面所述,WordPress Hosting 大多會限制流量或者每月瀏覽次數,這是為了讓一個主機內的資源能做最好的分配,以免因為其他人的網站流量過大而影響到使用品質,當然我們不能確定主機商是否有超賣(Overselling)的情形,但 WordPress Hosting 就跟虛擬主機一樣都有提供試用、不滿意退款保證,你可以先訂購、實際操作後,再評估看看是不是符合自己需求。

租用 WordPress Hosting 需要注意什麼?

跟一般虛擬主機一樣,WordPress Hosting 只不過是針對 WordPress 進行最佳化的環境,一般情況下價格可能會略高於虛擬主機一些(但價差不會很大),購買時可以注意看看不同方案、規格間的差異,例如可用容量、流量和瀏覽次數限制。

選擇一個最適合自己的方案來做購買即可,有些虛擬主機商提供多種 WordPress Hosting 規格定價,也可以在不敷使用時快速升級到另外一個方案。

此外,租用時大多會需要用到信用卡或 Paypal 付款,如果你的 Paypal 沒有餘額,那就必須綁定信用卡,直接從信用卡來線上支付費用。不過並不是每個虛擬主機商都支援 Paypal 線上支付,有些時候會需要使用信用卡付費。

不過 Pseric 還是建議使用 Paypal 付款,透過中間的支付平台為你的消費紀錄把關,當發生糾紛時還能夠提出申訴或請求退款(而且不會洩漏信用卡資料給第三方公司)。

先付費試用,不滿意退款

在租用虛擬主機(或 WordPress Hosting)前,我通常會先了解該公司的計價策略,以及是否提供不滿意退款保證(Money Back Guarantee),大部分的公司都有提供「付費試用,不滿意全額退款」,甚至在你超過試用期間後,退租時仍可以拿回部分的費用(但這取決於每家公司的規定),大部分的差別在於試用期間多寡,短至七天、長的甚至可達 90 天。

推薦使用的 WordPress Hosting

在介紹完基本的 WordPress 虛擬主機後,接下來就可以開始挑選適合你的 WordPress Hosting 啦!以下介紹的五個 WordPress 空間都是 Pseric 實際使用過,也認為能夠勝任大部分使用者需求的選擇,我會稍微就它們提供的規格做簡單的介紹,大家可以比較看看,那一個方案或空間最適合自己的需要。

就租用 WordPress Hosting 來說,會比租用虛擬主機來得更為單純一些,只需要選擇符合自己的流量規格,然後比較一下價格上的差異,就可以下手啦!

SiteGround

很多人可能沒聽過這家公司,事實上,SiteGround 開始於 2004 年,總部在巴拿馬,至今已經託管全世界超過二十五萬個網站。它們提供包括虛擬主機、雲端主機、獨立主機和經銷主機,而旗下的 WordPress Hosting 是許多網站的首要推薦項目。

SiteGround 的 WordPress Hosting 方案分為三種規格:StartUp、GrowBig 和 GoGeek,差異在於每月訪客數、空間大小和可託管的網站數量,起始方案價格在每月 $3.95 美元,摺合台幣只要一百多元左右,其實價格算是非常實惠的。比較特別的是 GrowBig 以上的方案提供由 SiteGround 自行開發的「Special Cache」快取功能,號稱能夠最佳化網站速度。

若你想要從 SiteGround 開始,我會建議選擇 GrowBig 以上方案來使用它提供的客製化快取功能。此外,它也附送一個網域名稱(每年價格 $14.95 美元,但不在可退費的範圍),以及 30 天不滿意全額退款保證。

DreamHost

DreamHost 旗下有個名為「DreamPress」的 WordPress Hosting 方案,是專為 WordPress 設計的架站平台,比較特別的是不同於一般的虛擬主機,DreamPress 採用將網站空間與資料庫分離的設計,每一個 WordPress 網站都是在虛擬專屬主機(Virtual Private Servers,簡稱 VPS)運作,即使你不懂技術也沒關係,DreamHost 讓這些都全自動處理,號稱能承載每月超過兩百萬的訪客數量。

DreamPress 2 的起始價格為每月 $19.95 美元(年繳),採用 WordPress 全自動化安裝、更新維護,以及每日自動備份,對於想要架設 WordPress 的使用者來說,DreamPress 是個相當不錯的選擇。

Media Temple

Media Temple 是頗有知名度的網站空間提供商,一直以來以穩定、安全、可信賴的服務而聞名,早先最多人推薦的是他們的 VPS 服務,不過後來也推出 WordPress Hosting ,成為旗下的主要產品。跟前面的 DreamPress 一樣,Media Temple 也提供客製化的安裝平台,讓你無須使用傳統的安裝方法即可快速建立自己的 WordPress 網站。

Media Temple 的 WordPress Hosting 提供數種規格,差異在於可託管的網站數量、可用空間和每月訪客數限制不同,最便宜的方案每月 $20 美元起跳,年繳還可享受兩個月免費,一次繳兩年、三年的優惠更多。

HostGator

我先前已經在虛擬主機推薦裡介紹過 HostGator,也使用 HostGator 來實際操作租用、架設 WordPress 網站教學,相信大家對它都不陌生。HostGator 堪稱是世界數一數二的虛擬主機提供商,旗下有相當多的用戶和託管網站,當然價格、穩定性方面也不在話下。

HostGator 有號稱為 WordPress 設計的 WordPress Hosting,不過倒是比較像一般虛擬主機下去做宣傳、推廣而已,沒有其他特殊功能(但用 HostGator 倒還蠻穩定的,而且沒有流量和訪客數量限制)。註冊時可使用本站提供的折扣代碼 FREEGROUP25 ,享受到總金額折抵 25% 的優惠,也就是平均每個月只要 $5.22 USD。

Bluehost

Bluehost 跟 HostGator 一樣,也是非常老牌、世界級的虛擬主機提供商,不過 Bluehost 是 WordPress 官方推薦使用的虛擬主機,它針對 WordPress 推出最佳化的空間(Optimized Hosting),建立在 VPS 技術上,讓 WordPress 有更好的效能表現。

Bluehost 的 WordPress Hosting 是以訪客數、容量、記憶體和可託管的網站數來做價格上的劃分,最便宜的起始方案第一個月是 $12.49 美元,提供 30 天試用,不滿意退款保證。以它提供的方案來說,最便宜的 Blogger 方案應該已經符合大部分中小型網站的需要。

接下來,交給你了!

在介紹完五個我推薦的 WordPress Hosting,相信對於想要架站的朋友來說,又多了一些不同的選擇。接下來,你可以參考以下我之前寫過的文章,或許對於要搬家的你來說會有一些幫助,不過別忘記了,這是 WordPress Hosting,你可能無須手動安裝 WordPress。

  • 自架 WordPress 虛擬主機租用教學,將網誌備份匯出、匯入到新家

對於 WordPress Hosting,你還有更多的推薦選項嗎?歡迎在文章下方提供給大家,與我進行交流,下一步我會實際以 WordPress Hosting 來快速架設一個 WordPress 網站教學,希望大家會喜歡囉!

  • 按一下以分享至 Facebook(在新視窗中開啟)
  • 分享到 Twitter(在新視窗中開啟)
  • 分享到 LinkedIn(在新視窗中開啟)
  • 分享到 Pinterest(在新視窗中開啟)
  • 分享到 Pocket(在新視窗中開啟)

相關文章

本站聲明:網站內容來源免費資源網路社群https://free.com.tw,如有侵權,請聯繫我們,我們將及時處理

【精選推薦文章】

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

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

評比前十大台北網頁設計、台北網站設計公司知名案例作品心得分享

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

如何下載、匯入 WordPress 佈景主題開發測試範例元件(Theme Unit Test)?

說到 WordPress,最為人津津樂道的就是它的外掛和佈景主題資料庫相當龐大,也因為它提供了非常完整的開發資源,讓每個人都能設計自己所需的元件或模版樣式。如果你也想為自己的 WordPress 網站開發獨特的版面設計,官方說明文件(WordPress Codex)提供了一個測試範例元件檔案,能產生一堆用來開發測試用的內容,非常好用。

這個檔案收錄在「Theme Unit Test」裡,可能很多人不知道,其實它就是一個包含許多測試內容的 xml 文件,幾乎用到了所有 WordPress 裡可能出現的功能和內容,包括不同階層標題、項目符號、表格、文字樣式、圖片、特殊字元、分類標籤、分頁、多媒體等等。

利用 WordPress 本身的匯入功能,即可把這些內容快速置入測試用網站裡。

使用教學

接下來的步驟會匯入大量的測試開發元件,請在全新的 WordPress 網站進行操作,以免發生問題。

STEP 1

開啟 WordPress Codex 的 Theme Unit Test 頁面,從 Setup 的第一項來下載測試資料,下載後是一個 .xml 的檔案格式,稍後我會再教你怎麼把資料正確匯入 WordPress。

STEP 2

登入剛架設好的 WordPress 網站控制台(記得用全新的網站測試),從左側選單點選「工具」內的「匯入」,然後找到 WordPress 。

第一次使用時會先安裝 WordPress Importer 外掛,點選右下角的「立刻安裝」,安裝後啟用外掛,即可進入匯入工具。

STEP 3

接著回到匯入工具,在 Import WordPress 頁面裡點選「瀏覽」來選取剛才下載的開發測試檔案(theme-unit-test-data.xml),然後按下「上傳檔案並匯入」按鈕。

STEP 4

接著會開始進行匯入檔案前的設定,在這裡別忘記勾選 Import Attachments 下方的「Download and import file attachments」來下載、匯入附件檔案,勾選後按下「Submit」就會將測試元件匯入 WordPress 網站。

STEP 5

匯入完成,你可以看到原先空蕩蕩的 WordPress 網站裡瞬間多出很多測試用的內容。

回到 WordPress 網站首頁,也可以看到各種類型的文章、分頁和分類彙整被加入,這些內容涵蓋許多設計佈景主題時會用到的測試內容,協助開發者在製作佈景主題樣式時可以直接檢視效果,而不需要再自行手動產生測試用的元件。

  • 按一下以分享至 Facebook(在新視窗中開啟)
  • 分享到 Twitter(在新視窗中開啟)
  • 分享到 LinkedIn(在新視窗中開啟)
  • 分享到 Pinterest(在新視窗中開啟)
  • 分享到 Pocket(在新視窗中開啟)

相關文章

本站聲明:網站內容來源免費資源網路社群https://free.com.tw,如有侵權,請聯繫我們,我們將及時處理

【精選推薦文章】

智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

想知道網站建置、網站改版該如何進行嗎?將由專業工程師為您規劃客製化網頁設計及後台網頁設計

帶您來看台北網站建置,台北網頁設計,各種案例分享

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

啟用 Jetpack「單一登入」機制教學,讓你的 WordPress 網站更安全(含兩步驟驗證)

好像有一段時間沒有寫關於 WordPress 架站的相關文章,事實上,最近找到一個能夠有效提升 WordPress 安全性的方法,簡單來說,啟用內建於 Jetpack 外掛的「單一登入」模組,也就是 Single Sign On(SSO)功能,然後把原本帳號密碼驗證方式關閉停用,將驗證導回讓 WordPress.com 處理。

這麼做有那些好處呢?除了可為帳號加上兩階段驗證保護,從應用程式或手機來接受驗證碼,提高帳號安全性以外,更大的優點是自己的網站無須負載被暴力攻擊、破解的資源耗費問題,因為驗證會被導向 WordPress.com,這個由 Automattic 營運的平台將提供更好的安全性防護。

使用 WordPress 架站的話一定知道:WordPress 登入畫面預設是對外開放的,這也表示任何人都可以存取你的登入頁面,甚至可能從其他地方取得密碼並登入網站。為了更好的安全性,建議要妥善保護好登入頁面(延伸閱讀:安裝 WordPress 後你應該做的 25 件事、9 個提升 WordPress 網站安全性的方法)。

不過,現在不用這麼麻煩了!因為 Jetpack 的 Single Sign On(SSO)把登入驗證的任務交給 WordPress.com 為你把關,拋棄那些第三方登入、兩階段驗證的相關外掛吧!照著接下來的教學,我會教你如何快速有效提升網站的登入頁面安全性。

使用「單一登入」功能保護你的 WordPress

WordPress 的「單一登入(SSO)」功能提供了一個更安全的驗證方法,以保護你的網站免於受到暴力破解攻擊。一旦啟用,你原有的 WordPress 登入畫面會被關閉,你必須登入 WordPress.com 帳號才能進入自己的 WordPress 網站控制台。

Digital Inspiration 在這篇文章提到開啟「單一登入」有這些好處:

  1. 由於 WordPress.com 已經支援兩階段驗證,現在啟用後將能為你的網站提供相同等級的安全防護機制,而且不需要安裝額外的外掛功能。
  2. 你網站所有登入請求,包括惡意登入嘗試,現在都會被導向 WordPress.com,進而減少伺服器和資料庫的負載。
  3. 如果你管理多個網站,你可以使用單一 WordPress.com 帳戶來登入、管理,無須記住多組不同的帳號密碼組合。

如何使用 Jetpack 實現「單一登入」?

STEP 1

如果你從來沒用過 Jetpack 外掛,那麼你可能也沒有 WordPress.com 帳戶,可以先開啟這個鏈結,填入 Email、使用者名稱、密碼等相關資訊來建立一個 WP.com 帳號。在註冊時你可能會被要求建立一個 WordPress 網誌,但這不會影響接下來的操作。

STEP 2

申請好 WordPress.com 帳號後,開啟這個鏈結,為你的帳號設定「兩步驟驗證」,增添額外的安全防護。設定前要先填入自己的手機號碼,下載兩階段驗證專用的手機應用程式,跟著網頁步驟操作即可完成設定。

延伸閱讀:

  • 8 個線上服務「兩步驟驗證」設定說明,確保帳戶免於威脅

一旦啟用你的 WordPress.com 兩步驟驗證後,未來當你登入帳號時不僅要輸入正確的使用者名稱、密碼,同時也要輸入一組由行動裝置產生的驗證碼。

STEP 3

回到你的 WordPress 網站,從「外掛 | 安裝外掛」頁面找到 Jetpack,點選「立刻安裝」來自動下載、安裝到你的網站。

第一次使用 Jetpack 時會要求連接到你的 WordPress.com 帳戶,按下連接、登入帳號後,點選「Approve」藍色按鈕即可把網站與你的帳號連結。

STEP 4

設定好 Jetpack 後,即可開啟相關模組功能(在 Jetpack 3.8 版時出現一個問題,那就是介面會變成英文版,不過不影響使用)。

找到我們需要的「單一登入(英文為 Single Sign On)」,然後將它啟用。

STEP 5

以 FTP、SFTP 或 SSH 連接到你的 WordPress 伺服器,開啟當前使用的佈景主題資料夾(路徑為 wp-content/themes/theme-name),編輯 functions.php 檔。複製以下程式碼,貼到檔案後儲存:

add_filter( 'jetpack_sso_bypass_login_forward_wpcom', '__return_true' );

這個步驟主要用於「停用 WordPress 內建的登入頁面」,改由重新導向至 WordPress.com 進行登入及驗證身份。如果你的網誌是屬於多人協作,或者你希望保留原有的登入畫面,可跳過此步驟。

STEP 6

前往「帳號 | 個人資訊」頁面,可以在最底部找到「Log in with WordPress.com」按鈕,這是用來把你的網站登入帳號連結 WordPress.com 帳號。登入後,你就能看到如下畫面,表示已成功連結(Connected)至這個帳號,同時也啟用了兩步驟驗證。

STEP 7

最後,當你登出、重新登入 WordPress 時,就不會出現原有的登入頁面,而是被引導至 WordPress.com 網站,你必須在這裡登入已連結的 WordPress.com 帳號,通過驗證後就可以進入你的控制台囉!

若你在設定途中發現任何問題,導致無法正確登入網站的話,可以把步驟五的程式碼從檔案裡移除,然後將 Jetpack 外掛資料夾整個刪除,就能暫時關閉、停用「單一登入」。

另外,Jetpack 裡也提供了幾個非常實用的模組,建議開啟:

  • Photon 免費 CDN 圖片分流、加速服務,每個 WordPress 用戶都該開啟的外掛
  • Jetpack Monitor 免費 24/7 網站監測服務,WordPress 無法連線自動發送提醒
  • 按一下以分享至 Facebook(在新視窗中開啟)
  • 分享到 Twitter(在新視窗中開啟)
  • 分享到 LinkedIn(在新視窗中開啟)
  • 分享到 Pinterest(在新視窗中開啟)
  • 分享到 Pocket(在新視窗中開啟)

相關文章

本站聲明:網站內容來源免費資源網路社群https://free.com.tw,如有侵權,請聯繫我們,我們將及時處理

【精選推薦文章】

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

想要讓你的商品在網路上成為最夯、最多人討論的話題?

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

不管是台北網頁設計公司、台中網頁設計公司,全省皆有專員為您服務

想知道最厲害的台北網頁設計公司推薦、台中網頁設計公司推薦專業設計師"嚨底家"!!

Zabbix監控ActiveMQ

當我們在線上使用了ActiveMQ 后,我們需要對一些參數進行監控,比如 消息是否有阻塞,哪個消息隊列阻塞了,總的消息數是多少等等。下面我們就通過 Zabbix 結合 Python 腳本來實現對 ActiveMQ的監控。

一、創建 Activemq Python 監控腳本

因為 CentOS 系統默認安裝的是 Python2.7,為了避免麻煩,我們這裏的腳本也是對應的 Python2

Python2 監控腳本

# -*- coding: utf-8 -*-
# @Time    : 2019/6/25 9:26
# @Author  : djx
# @Email   : djxlsp@163.com
# @File    : mointer_mq_python2.py
# @Software: PyCharm
# @Python_version: python2.7

import base64
import urllib2
import json
import logging
import sys


def activemq_mointer(userinfo_encode):
    # 總的消息阻塞數
    pending_queue_sum = 0
    # 阻塞消息的隊列名稱
    pending_queue_lists = ''
    # 總的消息數
    mq_sum = 0
    headers = {
        'Authorization': 'Basic {}'.format(userinfo_encode),
        'ua': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.125 Safari/537.36'
    }
    url = 'http://' + ip + ':' + port + \
          '/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost/Queues/'
    request = urllib2.Request(url=url, headers=headers)
    try:
        response = urllib2.urlopen(request)
    except Exception as e:
        logging.error(e)
        return {'pending_queue_sum': 110, 'pending_queue_lists': '110', 'mq_sum': 0}  # 當服務不可用時,返回預警数字,用於預警。
    activemq_info = response.read()
    activemq_info_json = json.loads(activemq_info)
    activemq_queues = activemq_info_json['value']
    for i in activemq_queues:
        queue_url = 'http://' + ip + ':' + port + \
            '/api/jolokia/read/' + i['objectName']
        queue_request = urllib2.Request(url=queue_url, headers=headers)
        try:
            queue_response = urllib2.urlopen(queue_request)
        except Exception as e:
            logging.error(e)
            return {'pending_queue_sum': 110, 'pending_queue_lists': '110', 'mq_sum': 0}
        queue_info = queue_response.read()
        info_dict = json.loads(queue_info)
        mq_sum += info_dict['value']['EnqueueCount']
        if int(info_dict['value']['QueueSize']
               ) > 0:  # 取值 QueueSize ,就是未消費的消息數量
            pending_queue_sum += info_dict['value']['QueueSize']
            pending_queue_lists += info_dict['value']['Name']
            pending_queue_lists += ' and '
            logging.info(
                "消息隊列--{}--有阻塞消息--{} 條".format(
                    info_dict['value']['Name'],
                    info_dict['value']['QueueSize']))
    return {'pending_queue_sum': pending_queue_sum, 'pending_queue_lists': pending_queue_lists, 'mq_sum': mq_sum}


if __name__ == '__main__':
    # ActiveMQ 服務器信息
    username = 'admin'
    password = 'admin'
    ip = '127.0.0.1'
    port = '8161'
    userinfo = username + ':' + password
    userinfo_encode = base64.b64encode(userinfo.encode('utf8'))
    # 日誌配置,注意下面日誌文件的路徑是採用相對路徑的。
    logging.basicConfig(
        filename="activemq_mointer.log",
        filemode="a",
        format="%(asctime)s %(name)s:%(levelname)s:%(message)s",
        datefmt="%Y-%m-%d %H:%M:%S",
        level=logging.DEBUG)
    if len(sys.argv) == 2:
        mointer_argv = sys.argv[1]
        if mointer_argv in ('pending', 'pending_lists', 'queue_sum'):
            mq_re = activemq_mointer(userinfo_encode)
            if mointer_argv == 'pending':
                print(mq_re['pending_queue_sum'])
            elif mointer_argv == 'pending_lists':
                print(mq_re['pending_queue_lists'])
            else:
                print(mq_re['mq_sum'])
        else:
            # 錯誤提示
            print("Please enter the correct parameters pending|pending_lists|queue_sum")
    else:
        # 錯誤提示
        print("Please enter the correct parameters pending|pending_lists|queue_sum")

使用該腳本注意事項:

  1. 傳入參數只能一個 ,而且只能是 pending, pending_lists, queue_sum ,分別代表阻塞消息數、阻塞消息隊列名稱、總的消息數。

  2. 腳本有日誌記錄和異常記錄,注意設置 日誌文件路徑,假設腳本路徑位於 /opt/scripts/,我們在該目錄下進行執行腳本的話,activemq_mointer.log 日誌文件也就會產生在當前目錄下。我們可以在路徑中通過相對路徑來指定文件夾 形如 ../..//var/log/activemq_mointer.log

  3. 該腳本是由 zabbix agent 進行使用 ,所以我們需要設置該 腳本的權限,以及保證該腳本的用戶有創建日誌文件的權限(或者我們先前創建好對應權限日誌文件)

    sudo chown  zabbix:zabbix  mointer_mq_python2.py
    sudo  chmod 744 mointer_mq_python2.py
    sudo  touch /var/log/activemq_mointer.log
    sudo chown  zabbix:zabbix  /var/log/activemq_mointer.log

二 、設置 zabbix agent

設置 zabbix agent

# 將監控項配置寫入配置文件
sudo echo "UserParameter=activemq.mointer[*],python /opt/scripts/mointer_mq_python2.py \$1 " >> /opt/zabbix-agent/etc/zabbix_agentd.conf
# 重啟zabbix agent
sudo systemctl restart  zabbix-agent 

三、導入監控項:

監控模板 xml 文件。(該監控模板包含三個監控項,一個觸發器)

<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
    <version>4.0</version>
    <date>2019-06-26T03:49:47Z</date>
    <groups>
        <group>
            <name>AWS-1688</name>
        </group>
        <group>
            <name>Fy-hbg</name>
        </group>
    </groups>
    <templates>
        <template>
            <template>Template App ActiveMQ</template>
            <name>Template App ActiveMQ</name>
            <description/>
            <groups>
                <group>
                    <name>AWS-1688</name>
                </group>
                <group>
                    <name>Fy-hbg</name>
                </group>
            </groups>
            <applications>
                <application>
                    <name>ActiveMQ</name>
                </application>
            </applications>
            <items>
                <item>
                    <name>activemq pending amount</name>
                    <type>0</type>
                    <snmp_community/>
                    <snmp_oid/>
                    <key>activemq.mointer[pending]</key>
                    <delay>1m</delay>
                    <history>90d</history>
                    <trends>365d</trends>
                    <status>0</status>
                    <value_type>3</value_type>
                    <allowed_hosts/>
                    <units>條</units>
                    <snmpv3_contextname/>
                    <snmpv3_securityname/>
                    <snmpv3_securitylevel>0</snmpv3_securitylevel>
                    <snmpv3_authprotocol>0</snmpv3_authprotocol>
                    <snmpv3_authpassphrase/>
                    <snmpv3_privprotocol>0</snmpv3_privprotocol>
                    <snmpv3_privpassphrase/>
                    <params/>
                    <ipmi_sensor/>
                    <authtype>0</authtype>
                    <username/>
                    <password/>
                    <publickey/>
                    <privatekey/>
                    <port/>
                    <description/>
                    <inventory_link>0</inventory_link>
                    <applications>
                        <application>
                            <name>ActiveMQ</name>
                        </application>
                    </applications>
                    <valuemap/>
                    <logtimefmt/>
                    <preprocessing/>
                    <jmx_endpoint/>
                    <timeout>3s</timeout>
                    <url/>
                    <query_fields/>
                    <posts/>
                    <status_codes>200</status_codes>
                    <follow_redirects>1</follow_redirects>
                    <post_type>0</post_type>
                    <http_proxy/>
                    <headers/>
                    <retrieve_mode>0</retrieve_mode>
                    <request_method>0</request_method>
                    <output_format>0</output_format>
                    <allow_traps>0</allow_traps>
                    <ssl_cert_file/>
                    <ssl_key_file/>
                    <ssl_key_password/>
                    <verify_peer>0</verify_peer>
                    <verify_host>0</verify_host>
                    <master_item/>
                </item>
                <item>
                    <name>activemq pending queue name</name>
                    <type>0</type>
                    <snmp_community/>
                    <snmp_oid/>
                    <key>activemq.mointer[pending_lists]</key>
                    <delay>1m</delay>
                    <history>90d</history>
                    <trends>0</trends>
                    <status>0</status>
                    <value_type>1</value_type>
                    <allowed_hosts/>
                    <units/>
                    <snmpv3_contextname/>
                    <snmpv3_securityname/>
                    <snmpv3_securitylevel>0</snmpv3_securitylevel>
                    <snmpv3_authprotocol>0</snmpv3_authprotocol>
                    <snmpv3_authpassphrase/>
                    <snmpv3_privprotocol>0</snmpv3_privprotocol>
                    <snmpv3_privpassphrase/>
                    <params/>
                    <ipmi_sensor/>
                    <authtype>0</authtype>
                    <username/>
                    <password/>
                    <publickey/>
                    <privatekey/>
                    <port/>
                    <description/>
                    <inventory_link>0</inventory_link>
                    <applications>
                        <application>
                            <name>ActiveMQ</name>
                        </application>
                    </applications>
                    <valuemap/>
                    <logtimefmt/>
                    <preprocessing/>
                    <jmx_endpoint/>
                    <timeout>3s</timeout>
                    <url/>
                    <query_fields/>
                    <posts/>
                    <status_codes>200</status_codes>
                    <follow_redirects>1</follow_redirects>
                    <post_type>0</post_type>
                    <http_proxy/>
                    <headers/>
                    <retrieve_mode>0</retrieve_mode>
                    <request_method>0</request_method>
                    <output_format>0</output_format>
                    <allow_traps>0</allow_traps>
                    <ssl_cert_file/>
                    <ssl_key_file/>
                    <ssl_key_password/>
                    <verify_peer>0</verify_peer>
                    <verify_host>0</verify_host>
                    <master_item/>
                </item>
                <item>
                    <name>Total number of  activemq msg</name>
                    <type>0</type>
                    <snmp_community/>
                    <snmp_oid/>
                    <key>activemq.mointer[queue_sum]</key>
                    <delay>1m</delay>
                    <history>90d</history>
                    <trends>365d</trends>
                    <status>0</status>
                    <value_type>3</value_type>
                    <allowed_hosts/>
                    <units>條</units>
                    <snmpv3_contextname/>
                    <snmpv3_securityname/>
                    <snmpv3_securitylevel>0</snmpv3_securitylevel>
                    <snmpv3_authprotocol>0</snmpv3_authprotocol>
                    <snmpv3_authpassphrase/>
                    <snmpv3_privprotocol>0</snmpv3_privprotocol>
                    <snmpv3_privpassphrase/>
                    <params/>
                    <ipmi_sensor/>
                    <authtype>0</authtype>
                    <username/>
                    <password/>
                    <publickey/>
                    <privatekey/>
                    <port/>
                    <description/>
                    <inventory_link>0</inventory_link>
                    <applications>
                        <application>
                            <name>ActiveMQ</name>
                        </application>
                    </applications>
                    <valuemap/>
                    <logtimefmt/>
                    <preprocessing/>
                    <jmx_endpoint/>
                    <timeout>3s</timeout>
                    <url/>
                    <query_fields/>
                    <posts/>
                    <status_codes>200</status_codes>
                    <follow_redirects>1</follow_redirects>
                    <post_type>0</post_type>
                    <http_proxy/>
                    <headers/>
                    <retrieve_mode>0</retrieve_mode>
                    <request_method>0</request_method>
                    <output_format>0</output_format>
                    <allow_traps>0</allow_traps>
                    <ssl_cert_file/>
                    <ssl_key_file/>
                    <ssl_key_password/>
                    <verify_peer>0</verify_peer>
                    <verify_host>0</verify_host>
                    <master_item/>
                </item>
            </items>
            <discovery_rules/>
            <httptests/>
            <macros/>
            <templates/>
            <screens/>
        </template>
    </templates>
    <triggers>
        <trigger>
            <expression>{Template App ActiveMQ:activemq.mointer[pending].avg(10m)}&gt;=5</expression>
            <recovery_mode>1</recovery_mode>
            <recovery_expression>{Template App ActiveMQ:activemq.mointer[pending].avg(5m)}=0</recovery_expression>
            <name>activemq queue  pending on {HOST.NAME}</name>
            <correlation_mode>0</correlation_mode>
            <correlation_tag/>
            <url/>
            <status>0</status>
            <priority>3</priority>
            <description>activemq 消息發生阻塞,10分鐘內平均阻塞消息數超過5條</description>
            <type>0</type>
            <manual_close>0</manual_close>
            <dependencies/>
            <tags/>
        </trigger>
    </triggers>
</zabbix_export>

將該監控模板鏈接到對應的主機。

我們可以看到我們監控的數據了。

至此,ActiveMQ 的監控項都已經配置好了。

【精選推薦文章】

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

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

評比前十大台北網頁設計、台北網站設計公司知名案例作品心得分享

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

Java 轉PPT為圖片、PDF、SVG、XPS、ODP以及PPT和PPTX互轉

同一文檔,在不同的文檔查看器或者編譯環境中,需要對該文檔進行相應的格式轉換。下面的內容中,將介紹通過Java編程來實現PPT文檔格式轉換的方法。

使用工具:

  • Spire.Presentation for Java
  • IntelliJ IDEA

 

Jar文件獲取及導入:

方法1:通過官網獲取jar文件包。下載文件后,解壓,並將lib文件夾下的Spire.Presentation.jar文件導入IDEA程序。

方法2:通過maven倉庫安裝導入。

 

Java代碼示例(供參考)

【示例1】PPT轉為圖片

import com.spire.presentation.*;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;

public class PPTtoPNG {
    public static void main(String[] args) throws Exception{
        //創建Presentation對象
        Presentation ppt = new Presentation();

        //加載示例文檔
        ppt.loadFromFile("sample.pptx");

        //遍歷幻燈片
        for (int i = 0; i < ppt.getSlides().getCount(); i++) {
            //將幻燈片保存為BufferedImage對象
            BufferedImage image = ppt.getSlides().get(i).saveAsImage();

            //將BufferedImage保存為PNG格式文件
            String fileName =  String.format("ToImage.png", i);
            ImageIO.write(image, "PNG",new File(fileName));
        }
        ppt.dispose();

    }
}

PPT轉圖片效果:

【示例2】PPT轉為PDF

import com.spire.presentation.FileFormat;
import com.spire.presentation.Presentation;

public class PPTtoPDF {
    public static void main(String[] args) throws Exception{
        //創建Presentation對象
        Presentation ppt = new Presentation();

        //加載示例文檔
        ppt.loadFromFile("sample.pptx");

        //保存為PDF文檔
        ppt.saveToFile("ToPDF.pdf", FileFormat.PDF);
        ppt.dispose();
    }
}

PPT轉PDF效果:

 

【示例3】PPT轉為SVG

import com.spire.presentation.*;
import java.io.FileOutputStream;
import java.util.ArrayList;

public class PPTtoSVG {
    public static void main(String[] args) throws Exception{
        //創建Presentation對象
        Presentation ppt = new Presentation();

        //加載示例文檔
        ppt.loadFromFile("sample.pptx");

        //將PowerPoint文檔轉換為SVG格式,並以byte數組的形式保存於ArrayList
        ArrayList<byte[]> svgBytes =(ArrayList<byte[]>) ppt.saveToSVG();

        //遍歷ArrayList中的byte數組
        for (int i = 0; i < svgBytes.size(); i++)
        {

            //將byte數組保存為SVG格式文件
            byte[] bytes = svgBytes.get(i);
            FileOutputStream stream = new FileOutputStream(String.format("ToSVG.svg", i));
            stream.write(bytes);
        }
        ppt.dispose();

    }
}

PPT轉SVG效果:

 

【示例4】PPT轉為XPS

import com.spire.presentation.*;

public class PPTtoXPS {
    public static void main(String[] args) throws  Exception{
        //加載測試文檔
        Presentation ppt = new Presentation();
        ppt.loadFromFile("sample.pptx");

        //保存為XPS
        ppt.saveToFile("ToXPS.xps",FileFormat.XPS);
        ppt.dispose();
    }
}

PPT轉XPS效果:

 

【示例5】PPT轉為ODP

import com.spire.presentation.*;

public class PPTtoODP {
    public static void main(String[] args) throws Exception {
        //加載測試文檔
        Presentation ppt = new Presentation();
        ppt.loadFromFile("sample.pptx");

        //保存為ODP
        ppt.saveToFile("ToODP.odp",FileFormat.ODP);
    }
}

 

【示例6】PPT和PPTX互轉

import com.spire.presentation.*;

public class PPTXtoPPT {
    public static void main( String[] args) throws Exception{
        //創建Presentation對象
        Presentation ppt = new Presentation();

        //加載PPTX文檔
        ppt.loadFromFile("sample.pptx");

        //保存為PPT
        ppt.saveToFile("ToPPT.ppt", FileFormat.PPT);

        //PPT轉為PPTX
        //ppt.loadFromFile("sample.ppt");
        //ppt.saveToFile("ToPPTX.pptx",FileFormat.PPTX_2013);
        ppt.dispose();
    }
}

 

(本文完)

轉載請註明出處!

 

【精選推薦文章】

智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

想知道網站建置、網站改版該如何進行嗎?將由專業工程師為您規劃客製化網頁設計及後台網頁設計

帶您來看台北網站建置,台北網頁設計,各種案例分享

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

SpringCloud微服務架構升級總結

一、背景

1.1 應用系統的架構歷史

1.2 什麼是微服務?

起源:微服務的概念源於 2014 年 3 月 Martin Fowler 所寫的一篇文章“Microservices”。文中內容提到:微服務架構是一種架構模式,它提倡將單一應用程序劃分成一組小的服務,服務之間互相協調、互相配合,為用戶提供最終價值。

通信方式:每個服務運行在其獨立的進程中,服務與服務間採用輕量級的通信機制互相溝通(通常是基於 HTTP 的 RESTful API)。

微服務的常規定義:微服務是一種架構風格,一個大型複雜軟件應用由一個或多個微服務組成。系統中的各個微服務可被獨立部署,各個微服務之間是松耦合的。每個微服務僅關注於完成一件任務。

把原來的一個完整的進程服務,拆分成兩個或兩個以上的進程服務,且互相之間存在調用關係,與原先單一的進程服務相比,就是“微服務”。(微服務是一個比較級的概念,而不是單一的概念)

1.3 微服務架構的優勢

  • 可擴展性:在增加業務功能時,單一應用架構需要在原先架構的代碼基礎上做比較大的調整,而微服務架構只需要增加新的微服務節點,並調整與之有關聯的微服務節點即可。在增加業務響應能力時,單一架構需要進行整體擴容,而微服務架構僅需要擴容響應能力不足的微服務節點。
  • 容錯性:在系統發生故障時,單一應用架構需要進行整個系統的修復,涉及到代碼的變更和應用的啟停,而微服務架構僅僅需要針對有問題的服務進行代碼的變更和服務的啟停。其他服務可通過重試、熔斷等機制實現應用層面的容錯。
  • 技術選型靈活:微服務架構下,每個微服務節點可以根據完成需求功能的不同,自由選擇最適合的技術棧,即使對單一的微服務節點進行重構,成本也非常低。
  • 開發運維效率更高:每個微服務節點都是一個單一進程,都專註於單一功能,並通過定義良好的接口清晰表述服務邊界。由於體積小、複雜度低,每個微服務可由一個小規模團隊或者個人完全掌控,易於保持高可維護性和開發效率。

Spring Cloud作為目前最流行的微服務開發框架,不是採用了Spring Cloud框架就實現了微服務架構,具備了微服務架構的優勢。正確的理解是使用Spring Cloud框架開發微服務架構的系統,使系統具備微服務架構的優勢(Spring Cloud就像工具,還需要“做”的過程)。

1.4 什麼是Spring Boot?什麼是Spring Cloud?

Spring Boot框架是由Pivotal團隊提供的全新框架,其設計目的是用來簡化基於Spring應用的初始搭建以及開發過程。SpringBoot框架使用了特定的方式來進行應用系統的配置,從而使開發人員不再需要耗費大量精力去定義模板化的配置文件。

Spring Cloud是一個基於Spring Boot實現的雲應用開發工具,它為基於JVM的雲應用開發中的配置管理、服務註冊,服務發現、斷路器、智能路由、微代理、控制總線、全局鎖、決策競選、分佈式會話和集群狀態管理等操作提供了一種簡單的開發方式。

1.5 微服務、Spring Boot、Spring Cloud三者之間的關係

  • 思想:微服務是一種架構的理念,提出了微服務的設計原則,從理論為具體的技術落地提供了指導思想。
  • 腳手架:Spring Boot是一套快速配置腳手架,可以基於Spring Boot快速開發單個微服務。
  • 多個組件的集合:Spring Cloud是一個基於Spring Boot實現的服務治理工具包;Spring Boot專註於快速、方便集成的單個微服務個體;Spring Cloud關注全局的服務治理框架。

二、技術解析

2.1 Everything is jar, Everything is http

Spring Boot通過@SpringBootApplication註解標識為Spring Boot應用程序。所有的應用都通過jar包方式編譯,部署和運行。

@SpringBootApplication 
public class Application {     
    private static final Logger LOGGER = LoggerFactory.getLogger(Application.class);     
    public static void main(String[] args) {         
        SpringApplication.run(Application.class, args);         
        LOGGER.info(”啟動成功!");     
    } 
}

 

每個Spring Boot的應用都可以通過內嵌web容器的方式提供http服務,僅僅需要在pom文件中依賴spring-boot-start-web即可,原則上微服務架構希望每個獨立節點都提供http服務。

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

 

2.2 Spring boot Task 任務啟動和定時任務

在Spring Boot需要啟動任務時,只要繼承CommandLineRunner接口實現其run方法即可。

@SpringBootApplication 
public class ClientDataListener implements CommandLineRunner
    public void run(String... strings) throws Exception {     
        clientInfoListenerHandler(); 
    }
}

 

在Spring Boot需要執行定時任務時,只需要在定時任務方法上增加@Scheduled(cron = “0 15 0 * * ?”)註解(支持標準cron表達式),並且在服務啟動類上增加@EnableScheduling的註解即可。

@SpringBootApplication
@EnableScheduling
public class Application {     
    private static final Logger LOGGER = LoggerFactory.getLogger(Application.class);     
    public static void main(String[] args) {         
        SpringApplication.run(Application.class, args);         
        LOGGER.info(”啟動成功!");     
    } 
}

 

// some class
@Scheduled(cron = "0 15 0 * * ?")
public void someTimeTask() {
    ***
}

 

2.3 Spring boot Actuator 監控

Actuator是spring boot提供的對應用系統自身進行監控的組件,在引入spring-boot-start-web基礎上引入spring-boot-starter-actuator即可。

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

 

2.4 Spring cloud Config 配置中心

在我們實現微服務架構時,每個微服務節點都需要自身的相關配置數據項,當節點眾多,維護就變得非常困難,因此需要建立一个中心配置服務。

Spring Cloud Config分為兩部分。Spring Cloud Config server作為一個服務進程,Spring Cloud Config File為配置文件存放位置。

2.5 Spring cloud Eureka 服務註冊中心

服務註冊的概念早在微服務架構之前就出現了,微服務架構更是把原先的單一應用節點拆分成非常多的微服務節點。互相之間的調用關係會非常複雜,Spring Cloud Eureka作為註冊中心,所有的微服務都可以將自身註冊到Spring Cloud Eureka進行統一的管理和訪問(Eureka和Zookeeper不同,在AOP原則中選擇了OP,更強調服務的有效性)

2.6 Spring cloud Zuul 服務端智能路由

當我們把所有的服務都註冊到Eureka(服務註冊中心)以後,就涉及到如何調用的問題。Spring Cloud Zuul是Spring Cloud提供的服務端代理組件,可以看做是網關,Zuul通過Eureka獲取到可用的服務,通過映射配置,客戶端通過訪問Zuul來訪問實際需要需要訪問的服務。所有的服務通過spring.application.name做標識,

不同IP地址,相同spring.application.name就是一個服務集群。當我們增加一個相同spring.application.name的節點,Zuul通過和Eureka通信獲取新增節點的信息實現智能路由,增加該類型服務的響應能力。

2.7 Spring cloud Ribbon 客戶端智能路由

與Spring Cloud Zuul的服務端代理相對應,Spring Cloud Ribbon提供了客戶端代理。在服務端代理中,客戶端並不需要知道最終是哪個微服務節點為之提供服務,而客戶端代理獲取實質提供服務的節點,並選擇一個進行服務調用。Ribbon和Zuul相似,也是通過和Eureka(服務註冊中心)進行通信來實現客戶端智能路由。

2.8 Spring cloud Sleuth 分佈式追蹤

2.9 Spring cloud Zipkin 調用鏈

2.10 Spring cloud Feign http客戶端

Spring Cloud Feign是一種聲明式、模板化的http客戶端。 使用Spring Cloud Feign請求遠程服務時能夠像調用本地方法一樣,讓開發者感覺不到這是遠程方法(Feign集成了Ribbon做負載均衡)。

把遠程服務和本地服務做映射

@FeignClient(name = "rabbitmq-http", url = "${SKYTRAIN_RABBITMQ_HTTP}") 
public interface TaskService {     
    @RequestMapping(value = "/api/queues", method = RequestMethod.GET)     
    public String query(@RequestHeader("Authorization") String token); 
}

 

以調用本地服務的方式調用遠程服務

@Autowired 
private TaskService taskService; 
private String queryRabbitmqStringInfo() {     
    byte[] credentials = Base64 .encodeBase64((rabbitmqHttpUserName + ":" + rabbitmqHttpPassword).getBytes(StandardCharsets.UTF_8));     
    String token = "Basic " + new String(credentials, StandardCharsets.UTF_8);     
    return taskService.query(token); 
}

 

2.11 Spring cloud Hystrix 斷路器

三、微服務實踐

3.1 我們開發的幾個微服務組件—應用管理中心

應用管理中心可以對每個已經註冊的微服務節點進行停止,編譯,打包,部署,啟動的完整的上線操作。

3.2 我們開發的幾個微服務組件—zookeeper數據查詢中心

zookeeper數據查詢中心根據zookeeper地址,端口,命令獲取zookeeper數據信息。

3.3 我們開發的幾個微服務組件—微服務健康檢測中心

健康檢測中心周期性檢查每個微服務的狀態,當發現有微服務狀態處於DOWN或連接超時時,觸發報警。

3.4 我們開發的幾個微服務組件—定時任務查詢中心

// 在BeanPostProcessor子類中攔截
@Component
public class SkytrainBeanPostProcessor implements BeanPostProcessor, Ordered {
    ***
    /**
     * Bean 實例化之後進行的處理
     */
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        beanPostProcessor.postProcessAfter(bean, beanName);
        return bean;
    }
    ***
}
// 攔截后獲取定時任務註解
***
public Object postProcessAfter(Object bean, String beanName) {
    Class targetClass = AopUtils.getTargetClass(bean);
    Map annotatedMethods = MethodIntrospector.selectMethods(targetClass,
            new MethodIntrospector.MetadataLookup() {
 
                public Set inspect(Method method) {
 
                    Set scheduledMethods = AnnotatedElementUtils.getMergedRepeatableAnnotations(method,
                            Scheduled.class, Schedules.class);
                    return (!scheduledMethods.isEmpty() ? scheduledMethods : null);
                }
            });
    if (!annotatedMethods.isEmpty()) {
        String className = targetClass.getName();
        for (Map.Entry entry : annotatedMethods.entrySet()) {
            Method method = entry.getKey();
            for (Scheduled scheduled : entry.getValue()) {
                String key = className + ":" + method.getName();
                String value = scheduled.toString();
                taskInfos.put(key, value);
            }
        }
    }
    return null;
}
***
 
// 獲取定時任務后註冊
***
public void taskRegister() {
    String nodeInfo = ipAddress + ":" + serverPort + ":";
    try {
        /**
         * 定時任務
         */
        Map infos = taskInfos;
        for (Entry item : infos.entrySet()) {
            String taskId = nodeInfo + item.getKey();
            String taskParameter = item.getValue();
            JSONObject info = new JSONObject();
            info.put("taskId", taskId);
            info.put("taskParameter", taskParameter);
            info.put("applicationName", applicationName);
            info.put("taskType", "schedule");
            LOGGER.info(info.toString());
            zooKeeperExecutor.createZKNode(SKYTRAIN_TASK_ZKNODE_PREFIX + taskId, info.toString());
        }
    }
    catch (Exception ex) {
        LOGGER.error("", ex);
    }
}
***

 

3.5 微服務的分類

  • 微服務平台組件
  • 公共服務組件
  • 基礎服務組件/業務服務組件

3.6 整體微服務架構圖

作者:梁鑫

來源:宜信技術學院

【精選推薦文章】

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

想要讓你的商品在網路上成為最夯、最多人討論的話題?

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

不管是台北網頁設計公司、台中網頁設計公司,全省皆有專員為您服務

想知道最厲害的台北網頁設計公司推薦、台中網頁設計公司推薦專業設計師"嚨底家"!!

Open Live Writer 微軟最好用離線編輯器開放原始碼!支援 WordPress、Blogger 等網誌平台

剛開始寫網誌時,我曾是微軟 Windows Live Writer(又被稱為 WLW)離線編輯器的忠實使用者,這部分我也在「我如何寫出一篇文章?每日必用的寫作相關軟體彙整」提過,若說是 Windows 中最好用的免費離線編輯器也不為過!也是少數會被使用者推崇的微軟產品,可惜最後一次大更新距今已過三年多時間,隨著 Windows Live Essentials 逐漸式微,它的前景令人擔憂。

不過好消息是微軟近期將 Windows Live Writer 開放原始碼後釋出,並重新取名為 Open Live Writer(OLW)!這項計畫的背後開發者為 .NET Foundation,也是積極推動開放原始碼發展的組織。其實早在去年 Scott Hanselman 便預告將 Windows Live Writer 開源的想法,直到今年底才正式推出第一個版本。

Open Live Writer 是一款桌面版網誌發佈應用程式,俗稱部落格離線編輯器,透過這項軟體可以在電腦上利用所見即所得(WYSIWYG)編輯器來撰寫文章、發佈相片、地圖等等。尤其一般網誌平台內建的編輯器都不是很好用,而且必須要在網路連線情況下才能使用,透過離線編輯器就如同在 Word 等文字處理軟體上工作,可以等到有網路時再將文章發送出去。

Open Live Writer 支援 WordPress、Blogger、TypePad 及 WordPress.com 等平台(未來會支援更多平台),當然所有使用 XML-RPC 協議的網誌平台也能連結,例如:痞客邦。

雖然仍未出現眾多使用者期待的 Mac 或 Linux 版,但能夠開放原始碼還是一件值得慶祝的事,代表日後會有志願者繼續維護這項專案,當然你也可以自由加入 GitHub 專案頁面來貢獻心力,或者免費下載 Open Live Writer 來做為你的部落格寫作工具。

軟體資訊

軟體名稱:Open Live Writer
軟體語系:英文
作業系統:Windows
官方網站:http://openlivewriter.org/
下載鏈結:官方網站免費下載

使用教學

STEP 1

從官方網站點選「Download」下載安裝程式,安裝後即可開始設定 Open Live Writer。

STEP 2

對於使用過 Windows Live Writer 的朋友應該不陌生,大致就是選擇你的網誌平台,然後設定網址、帳號密碼,連接後即可透過編輯器來撰寫文章,處理網誌上的文章內容。

設定好你的網誌網址、使用者名稱及密碼,透過 Open Live Writer 進行連接。如果你的平台無法被 Open Live Writer 識別,可能就要設定一個特定的網址,這部分要自己去爬文找找看設定教學。若是自己使用 WordPress 架站,那麼輸入網址就能抓到網站了。

Open Live Writer 延續 WLW 的特色,會將你的佈景主題複製下來,直接套用到離線編輯器上,這麼做的好處是當你離線寫作時,能即時知道文章發佈到網站上的樣子,這也是其他編輯器比較少做到的,非常方便的功能喔!

STEP 3

下圖是我使用 Open Live Writer 連結到我的部落格呈現出來的效果,可以看到編輯器變成了我部落格的網站樣式(黑色背景),同時在文字處理上也有相對應的樣式效果,使用時就跟在部落格上寫作的感覺很像。

OLW 的原始介面並沒有大幅度的修改和調整,保留大部分原有功能與設計。

若你正在使用 Windows Live Writer,或者打算重新安裝這套軟體,那麼你可能會想知道有沒有轉換成 Open Live Writer 的必要性呢?我的想法是有的,而且建議盡早升級轉換,因為 Windows Live Writer 已經有段時間沒有更新,說穿了是原有團隊已經不再繼續維護軟體,雖然還能正常使用,但不確定日後會不會發生問題。

Open Live Writer 是個延續這項軟體的開放原始碼計畫,會有更多人投入心力,提出好的點子(這也是開源優勢),可能不一定會立刻有什麼大轉變,但相信未來會成為更好的離線編輯器,也期待日後可以在 Mac 或 Linux 平台推出。

值得一試的三個理由:

  1. 最好用的 Windows Live Writer 網誌離線編輯器開放原始碼了!
  2. 命名為 Open Live Writer,現已放上 GitHub 頁面
  3. 延續 WLW 優良功能,新版已經修復無法連線 Blogger 的問題
  • 按一下以分享至 Facebook(在新視窗中開啟)
  • 分享到 Twitter(在新視窗中開啟)
  • 分享到 LinkedIn(在新視窗中開啟)
  • 分享到 Pinterest(在新視窗中開啟)
  • 分享到 Pocket(在新視窗中開啟)

相關文章

本站聲明:網站內容來源免費資源網路社群https://free.com.tw,如有侵權,請聯繫我們,我們將及時處理

【精選推薦文章】

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

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

評比前十大台北網頁設計、台北網站設計公司知名案例作品心得分享

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

Tap 免費 WordPress 架站空間,全管理式託管可安裝佈景主題外掛

近年來已經越來越多人捨棄 BSP(部落格服務提供商),轉而自己架設網站,畢竟價格和難度已不如以往,自架網站自由度高,可完整掌控網站的所有設定項目,使你在經營網站時能有更多調整空間。架設工具首推 WordPress,因為它非常簡單,而且在中文方面仍在持續維護更新,佈景主題及外掛資源也非常豐富,如果你想搬家,那麼我也推薦五個虛擬主機服務及 VPS,我還將租用到網誌備份匯入寫成一篇完整教學,只要照著做你也能輕鬆架站。

即便如此,仍然有許多人卻步而不知道該不該搬家或自架網站,或許在此之前,你可以先試試看 WordPress 的操作介面,再來考慮是否轉而投入 WordPress 平台。

本文要介紹這項服務「Tap」是一個全新的免費 WordPress 空間,更精確地說,它是一個全管理式虛擬主機(Managed WordPress hosting),若有租用過虛擬主機的話,應該對於這個名詞不陌生,「全管理式」虛擬主機空間讓你完全無須經手,你不用熟悉技術方面知識,操作上就如同一般網路服務那麼簡單。

但我使用後發現 Tap 其實更像是一個 WordPress Hosting(請參考:WordPress Hosting 架站空間精選,最多人推薦的五個國外虛擬主機方案),使用者只要在 Tap 上註冊帳戶,即可開啟 WordPress 網站,但跟 WordPress.com 或 Multisite 不同的是:每個網站都擁有最高權限,可隨時更新,或者安裝佈景主題、外掛,當然介面就跟自己架 WordPress 一樣。

不過要注意的是 Tap 分為兩種方案:免費及 Pro。付費方案每月 $5 美元,支援自訂網域名稱功能(Custom Domain),以及可使用 SFTP 來存取網站,也就是說若你使用免費方案,那麼只能使用 Tap 提供給你的子網域名稱(YourName.thisistap.com)。WordPress 可以直接在控制台內安裝外掛和佈景主題,所以 SFTP 部分就沒有影響,除非你想把一些檔案手動上傳到虛擬主機。

如果你想試試看自己架設 WordPress,但又擔心技術方面問題無法克服,Tap 或許是個不錯的折衷方案。當然 WordPress 本身有內建匯入匯出功能,你也可以很輕鬆地將其他網站的內容匯入,或者日後搬家,決定自架網站時再把 Tap 的內容匯出備份,不用擔心會被平台綁住而難以轉換。

網站名稱:Tap | Managed WordPress Hosting
網站鏈結:https://thisistap.com/

使用教學

STEP 1

開啟「Tap」網站後,點選網站中間的「Create My Free Site」來建立免費網站,註冊時需要填入你的姓名、Email 和密碼,勾選同意使用條款後就能取得帳號。

STEP 2

接著下一步,我們要在 Tap 平台內建立自己的 WordPress 網站,不過 WordPress 本身也有自己的安裝畫面,這裡只要設定你要使用的子網域名稱(YourName.thisistap.com),網站名稱及帳號密碼,但稍後在安裝 WordPress 時還會需要再輸入一次。

STEP 3

建立好網站後,你的 WordPress 網誌就會顯示在 Tap 的「My Sites」裡,那麼點選網站鏈結來繼續吧!(對了,如果你之後想要付費升級 Pro,也是在這個畫面點 Upgrade)

STEP 4

第一次開啟你的 WordPress 網站時會跳出安裝畫面,選擇語系將畫面拖曳到最下方,找到正體中文(繁體中文)選項,然後按「繼續」。

從這裡開始就是 WordPress 的範疇了,雖然它仍然是在 Tap 平台上,若有遇到任何使用上的問題,可以到 WordPress Taiwan 正體中文 Facebook 社團尋求協助。

設定相關資訊,包括網站標題、帳號、密碼、電子郵件等等,WordPress 安裝程式其實設計很簡單,只有簡單兩個步驟就能完成啦!安裝後會提示你開啟網站,或進入控制台。

STEP 5

在登入畫面輸入你在「安裝程式」(前一步驟)設定的帳號密碼,即可登入你的 WordPress 控制台,可以看到你能使用所有功能,包括新增文章、頁面、媒體,管理迴響,或者安裝佈景主題及外掛程式,以及管理帳號和設定網站等等。

WordPress 使用了最新的預設佈景主題。你可以從控制台來變更其他佈景主題,當然也可以自己安裝新的,不受限制。但免費版因為不提供 SFTP 功能,要安裝自己的佈景主題,必須先將整個資料夾壓縮成 Zip 檔,透過線上安裝的方式將它安裝到 WordPress。

STEP 6

最後,你就有一個自架的 WordPress 了!無論要做為一般生活記錄,或者設計成線上名片或個人網站,WordPress 都非常適合,不過如果想要長久經營,我建議還是申請一個網域名稱,付費升級 Pro 方案來設定自己的網址,這樣效果會比較理想。

或許有人會質疑 Tap 的穩定性,或者能否長久經營?我想無論是否使用此服務,或者自己租用虛擬空間來架設網站,基本上都會遇到類似問題,不過別擔心,Tap 允許使用者安裝外掛,那麼表示你也能夠使用外掛來備份內容(或者以內建的匯出工具),隨時將你寶貴的內容保存下來,當服務未來可能終止或不再繼續提供支援,也不會擔心內容無法轉出。

最好的方法還是建議註冊一個網址,未來要重起爐灶才不會又要重來。

值得一試的三個理由:

  1. 免費的「全管理式」空間(Managed WordPress Hosting)
  2. 可真正使用 WordPress 完整功能,包括自己安裝外掛、佈景主題
  3. 付費升級(每月 $5 美元)即可自訂網域名稱及使用 SFTP 功能
  • 按一下以分享至 Facebook(在新視窗中開啟)
  • 分享到 Twitter(在新視窗中開啟)
  • 分享到 LinkedIn(在新視窗中開啟)
  • 分享到 Pinterest(在新視窗中開啟)
  • 分享到 Pocket(在新視窗中開啟)

相關文章

本站聲明:網站內容來源免費資源網路社群https://free.com.tw,如有侵權,請聯繫我們,我們將及時處理

【精選推薦文章】

智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

想知道網站建置、網站改版該如何進行嗎?將由專業工程師為您規劃客製化網頁設計及後台網頁設計

帶您來看台北網站建置,台北網頁設計,各種案例分享

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

WordPress 桌面版應用程式免費下載!打造閱讀器、離線編輯及管理三合一體驗

前段時間 WordPress 發佈全新管理介面 Calypso,以桌面版應用程式形式提供使用者免費下載,創辦人 Matthew Mullenweg 認為,現今行動裝置非常流行,但一般撰寫或編輯文章仍多半侷限在電腦上進行,因此提供一個最佳化的部落格管理工具就顯得格外重要。這也促使 WordPress 持續獲得更多使用者。

WordPress.com 應用程式一開始只有 Mac 版,現在已延伸至 Windows 及 Linux ,搭配原有 iOS 及 Android 應用程式,幾乎可以說已經完成桌面端及行動裝置佈局。

本文要介紹新推出的 WordPress 應用程式,或者你可以稱它為部落格軟體,這個應用身兼三大功能:閱讀器、離線編輯器及管理工具!以往這三個部分要透過不同服務或軟體來達成,現在,WordPress 原生應用程式就能做到。將資訊來源及內容生產整合在一起,可以說是目前看過最強大的產生力工具。

除此之外,重頭戲仍擺在這次的 Calypso 更新,眾所皆知 WordPress 有非常易用且功能完整的控制台(WP-Admin),但每次要進行操作都必須登入網站,有時候不是那麼方便。WordPress 讓你能直接從桌面端來管理多個網站,全新設計的控制台有非常流暢的操作速度,在管理上更為輕鬆簡單。

不過 WordPress 應用程式最大特色是:可以拿來做為離線編輯器使用!

以往你可能會使用第三方離線編輯器來寫文章,例如:Open Live Writer,因為使用內建文章編輯器並不是那麼方便。在 WordPress 應用程式中,你可以透過全新可視化編輯器來寫文章,內建自動草稿儲存、插入圖片、設定分類與標籤及發佈等功能。

WordPress 應用程式不限於 WordPress.com 使用,如果你是採 WordPress.org 開放原始碼程式自行架站,安裝 Jetpack 一樣能夠支援。這是一款由 Automattic(WordPress 母公司)開發的外掛程式,包含幾項我曾介紹過的功能:

  • Photon 免費 CDN 圖片分流加速服務
  • Jetpack Monitor 免費 24/7 網站監測服務,網站無法連線自動提醒
  • 啟用 Jetpack「單一登入」機制教學,讓你的 WordPress 網站更安全

當然,如果你是使用 WordPress.com 免費部落格服務,只要下載應用程式,登入你的帳號密碼,即可讓軟體與你的部落格連線。

軟體資訊

軟體名稱:WordPress.com 桌面應用程式
軟體語系:多國語言
作業系統:Windows、Mac、Linux
官方網站:https://desktop.wordpress.com/
下載鏈結:官方網站免費下載

使用教學

STEP 1

開啟 WordPress.com 應用程式後,輸入你的使用者名稱、密碼來登入,這裡要輸入的不是你網站的登入帳號密碼,而是網站所連結的 WordPress.com 帳號資訊。

若你是使用 WordPress 自行架站,點選下方「Add self-hosted site」取得更多資訊。

STEP 2

WordPress.com 應用程式的預設畫面為「讀取器」,也就是前面提到的閱讀器。在這裡可以將你喜歡的網站內容加入「關注」,WordPress 會推薦你可能有興趣的相關網站內容。你還可以新增清單、加上標籤來分類不同的網站主題。

在閱讀器裡,你可以新增任何有 RSS Feed 功能的網站,不限於 WordPress 類型。

STEP 3

WordPress.com 應用程式的另一個特色是可以隨時收到通知。它就像一般軟體,當有人關注你,在你的網站按讚或留言,它會立即跳出提示讓你知道。

STEP 4

這個應用程式的亮點應該是管理功能,或許你之前在網頁端試用過,軟體把操作介面帶到桌面端,讓你不用從瀏覽器就能進行網站管理,包括新增文章頁面,或是更新升級佈景主題及外掛等等(必須從 Jetpack 開啟「Manage」模組才能用)。

不過我最喜歡的是 WordPress.com 的統計功能(Stats),它會清楚記錄下每天的網站流量變化,包括最熱門的文章頁面、來源網址、國家等資訊,相較於 Google 分析來說,內建的統計資料更為清楚易懂。

STEP 5

前面介紹有提到:WordPress 桌面版應用程式本身就是一個離線編輯器!現在,你可以直接在桌面端透過官方軟體來撰寫文章。

應用程式的編輯器功能非常好用,不但速度快、設計簡單大方,也和 WordPress 有更緊密的結合,因為它已經加入了網站相關設定,例如分類與標籤、特色圖片、分享等功能。

下圖是我使用 WordPress.com App for Windows 桌面版來寫文章的畫面擷圖,可以看到相較於原先網頁編輯器來說,桌面版設計更為乾淨明亮,讓你在寫文章時有更好的寫作體驗(如果常常苦思得不到靈感,就會知道這有多麼重要…)。

這個編輯器的另一特色是:無須連上網路,具備自動儲存草稿功能。若你正在尋找一款免費、好用的部落格寫作工具,WordPress.com App 會是非常棒的選擇!

WordPress 本身只是一個開放原始碼的 PHP 程式,用於架設網站部落格,但憑藉外掛功能,讓它延伸擴展更多更不一樣的變化!Matthew Mullenweg 始終相信開放相較於封閉有更多的好處,WordPress 彈性自由更可以適應不斷變化的網路環境。

這款 WordPress.com 桌面版應用程式耗時二十個月,由來自世界各地的開發者貢獻而生,相信它能跟上接下來的發展趨勢,讓我們有更為便利的數位寫作工具!

值得一試的三個理由:

  1. 開放原始碼,提供 Windows、Mac、Linux 三大平台免費下載
  2. 更好用的寫作工具,將重心聚焦於內容
  3. 速度快、操作簡單,使用現今最流行開發項目
  • 按一下以分享至 Facebook(在新視窗中開啟)
  • 分享到 Twitter(在新視窗中開啟)
  • 分享到 LinkedIn(在新視窗中開啟)
  • 分享到 Pinterest(在新視窗中開啟)
  • 分享到 Pocket(在新視窗中開啟)

相關文章

本站聲明:網站內容來源免費資源網路社群https://free.com.tw,如有侵權,請聯繫我們,我們將及時處理

【精選推薦文章】

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

想要讓你的商品在網路上成為最夯、最多人討論的話題?

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

不管是台北網頁設計公司、台中網頁設計公司,全省皆有專員為您服務

想知道最厲害的台北網頁設計公司推薦、台中網頁設計公司推薦專業設計師"嚨底家"!!

Imagify 免費線上圖片壓縮服務,三種模式切換壓縮比畫質

我習慣圖片上傳到網路前先手動壓縮處理,這麼做可以大幅節省上傳時間、降低容量,最大優點是使用者開啟網站載入圖片速度更快,也能更省流量。在壓縮工具方面,我傾向使用線上服務,關於這部分曾在「我如何寫出一篇文章?每日必用的寫作相關軟體彙整」文章做過介紹,TinyJPG 是我目前首要選擇,它前陣子也推出了 WordPress 外掛。

本文要介紹的 Imagify 是我私藏許久,本來不打算拿出來介紹的圖片壓縮工具,因為嚴格來說它並不是一款免費服務,Imagify 是一個 WordPress 外掛,可在使用者上傳圖片時,利用遠端伺服器來進行圖片壓縮最佳化,是你想獲得更小尺寸圖片又不損失畫質的好選擇。

Imagify 除了外掛,也提供線上圖片壓縮功能,這也是本文想推薦給大家的好工具。Imagify 有三種壓縮模式調整(讓你選擇要壓縮的程度以及是否破壞畫質),免費帳戶單張圖片不超過 5 MB 限制,最佳化圖片會保存一小時,你必須在刪除前把圖片手動下載下來。

網站名稱:Imagify
網站鏈結:https://imagify.io/optimizer/

使用教學

STEP 1

首先,開啟 Imagify 網站,選擇上方的「Try for Free」功能,會看到如下畫面,簡單介紹一下如何使用,很簡單,只要在左側選擇你要的壓縮模式、輸出設定(必須註冊),然後把圖片拖曳到右邊框框,就能開始壓縮。

STEP 2

Imagify 有三種壓縮模式:Normal、Aggressive 和 Ultra,預設為 Aggressive。

Normal 為無損壓縮,不會破壞原有圖片的畫質,但壓縮程度有限;Aggressive 會對圖片產生些許破壞,不過肉眼幾乎看不出來,能讓圖片獲得最好的壓縮效果。Ultra 將壓縮發揮到極致,讓你有最小的圖片容量,但會對圖片造成損壞。

如果沒有特殊需求,通常使用 Aggressive 就可以了。

STEP 3

最後把圖片拖曳到右邊欄位,Imagify 就會使用它們的演算法來進行壓縮處理。壓縮後圖片會出現在下方,同時顯示原有檔案大小、最佳化大小、總共節省下來的百分比。

點選圖片最後面的「Download」可下載最佳化後的圖片,或者點選「Download All Optimized Files」將所有圖片打包下載。

如果你覺得 Imagify 不符合你的需求,或者想試試看其他類似工具,可參考以下:

  • Compressor.io 線上將圖片壓縮 90%,但不減損畫質(支援 JPEG、PNG、GIF、SVG)
  • Optimizilla 線上壓縮 JPG、PNG 圖片,不降低畫質有效減少檔案大小
  • PP鴨:為你的圖片壓縮減肥!在維持畫質情況下有效減少圖片大小

值得一試的三個理由:

  1. 免下載或安裝軟體,透過瀏覽器即可進行圖片壓縮
  2. 三種壓縮模式,可調整壓縮比例和畫質
  3. 將最佳化圖片一鍵打包下載
  • 按一下以分享至 Facebook(在新視窗中開啟)
  • 分享到 Twitter(在新視窗中開啟)
  • 分享到 LinkedIn(在新視窗中開啟)
  • 分享到 Pinterest(在新視窗中開啟)
  • 分享到 Pocket(在新視窗中開啟)

相關文章

本站聲明:網站內容來源免費資源網路社群https://free.com.tw,如有侵權,請聯繫我們,我們將及時處理

【精選推薦文章】

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

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

評比前十大台北網頁設計、台北網站設計公司知名案例作品心得分享

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"