㈠ cmd命令bbo 消費者 怎麼調用 提供者
現在很流行的Dubbo很多朋友都聽說過吧,最近我也在看這方面的東西,分享先我的心得筆記。
先說說我們團隊要做的項目框架,很簡單重在實現基於zookeeper的bbo注冊。
框架:springmvc+spring+zookeeper+bbo
項目分三層,model存放數據,view頁面展示、controller下面具體邏輯實現。通過bbo消費方和供應方注冊,供應方給消費方暴露介面,供消費方調用。
工程部署需要配置文件有:
applicationContext-bbo.xml
{--
<--
消費方應用名,用於計算依賴關系,不是匹配條件,不要與提供方一樣
-->
<--
使用zookeeper注冊中心暴露服務地址
-->
<--
生成遠程服務代理,可以像使用本地bean一樣使用demoService
-->
<bbo:reference
id="demoService"
interface="com.unj.bbotest.provider.DemoService"
/>
--}
bbo.properties
{--
<--基於ZooKeeper的Dubbo注冊中心直接部署tomcat,修改WEB-INF下文件-->
bbo.registry.address=zookeeper://127.0.0.1:2181
bbo.admin.root.password=root
bbo.admin.guest.password=guest
--}
zoo_sample.cfg
{--
zookeeper/conf/下,修改zoo_sample.cfg為zoo.cfg,啟動bin/下zkServer.cmd
--}
因為引入bbo,摒棄了原有Web
Service項目的wdls暴露,由於項目依賴關系嚴重,項目使用maven構建,通過Maven
pom.xml三維坐標引入jar包,調用bbo暴露介面開發。
性能測試工具:LoadRunner、jmeter
介面測試工具:LoadRunner、jmeter、soapUI、Spotlight
安全測試工具:NStalker-Web、AppScan、TamperIESetup
自動化工具
:BadboyInstaller、QTP
/**
*
@author
wonter
*
<b>描述:</b>
一天學一個模式
更新中,請關注我的博客!
*
<b>博客:</b>
http://www.cnblogs.com/javame
*
<b>郵件:</b>
[email protected]
㈡ bbo privider與consumer同時配置retry以哪個為主
bbo配置優先順序:
方法級>介面級>全局級
消費方配置優先於提供方配置
所以,retry如果都配了,以消費方為主。
㈢ 有用jo malone的親嗎
運行環境
Jdk-1.6.30以上版本
Tomcat-7.0.42
Duboo-2.5.3
Zookeeper-3.4.5
埠分配
序
系統/埠
http
https
shutdown
ajp
調度JMX
Dubbo
備注
1
Tomcat
8080
8443
8005
8009
原埠保留
2
bbo console
4000
4003
4005
4009
zookeeper注冊埠:2181 本地bbo埠通常是:2088x
3
bbo monitor
4010
4013
4015
4019
Dubbo監控中心安裝
1. 說明
Simple Monitor掛掉不會影響到Consumer和Provider之間的調用,所以用於生產環境不會有風險。
Simple Monitor採用磁碟存儲統計信息,請注意安裝機器的磁碟限制,如果要集群,建議用mount共享磁碟。
charts目錄必須放在jetty.directory下,否則頁面上訪問不了。
2. 安裝
wget http://code.alibabatech.com/mvn/releases/com/alibaba/bbo-monitor-simple/2.5.3/bbo-monitor-simple-2.5.3-assembly.tar.gz
tar zxvf bbo-monitor-simple-2.5.3-assembly.tar.gz
mv bbo-monitor-simple-2.5.3 /usr/local/bbo-monitor-simple-4010
3. 配置
cd /usr/local/bbo-monitor-simple-4010
vi conf/bbo.properties
bbo.container=log4j,spring,registry,jetty
bbo.application.name=simple-monitor
bbo.application.owner=
#bbo.registry.address=multicast://224.5.6.7:1234
#bbo.registry.address=zookeeper://127.0.0.1:2181
bbo.registry.address=zookeeper://172.20.32.211:2181?backup=172.20.32.143:2181,172.20.32.143:2182
#bbo.registry.address=redis://127.0.0.1:6379
#bbo.registry.address=bbo://127.0.0.1:9090
bbo.protocol.port=7070
bbo.jetty.port=4010
bbo.jetty.directory=${user.home}/monitor
bbo.charts.directory=${bbo.jetty.directory}/charts
bbo.statistics.directory=${user.home}/monitor/statistics
bbo.log4j.file=logs/bbo-monitor-simple.log
bbo.log4j.level=WARN
4. 啟動
./bin/start.sh
5. 停止
./bin/stop.sh
6. 重啟:
./bin/restart.sh
7. 調試:
./bin/start.sh debug
8. 系統狀態
./bin/mp.sh
9. 總控入口:
./bin/server.sh start
./bin/server.sh stop
./bin/server.sh restart
./bin/server.sh debug
./bin/server.sh mp
10. 標准輸出
tail -f logs/stdout.log
命令行: (See: Telnet Command Reference)
11. 驗證啟動狀態
echo status | nc -i 1 127.0.0.1 7070
12. 訪問:
http://10.0.30.138:4010/
Dubbo管理控制台安裝
管理控制台為內部裁剪版本,開源部分主要包含:路由規則,動態配置,服務降級,訪問控制,權重調整,負載均衡,等管理功能。
1. 安裝
unzip apache-tomcat-7.0.42.zip -d /usr/local/
mv apache-tomcat-7.0.42 apache-tomcat-7.0.42-4000
cd /usr/local/apache-tomcat-7.0.42-4000
chmod -R +x *
wget http://code.alibabatech.com/mvn/releases/com/alibaba/bbo-admin/2.5.3/bbo-admin-2.5.3.war
unzip bbo-admin-2.5.3.war -d /usr/local/zhanglin/logistics/bbo-admin
2. 配置
修改tomcat的埠,修改host節點
server.xml
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="bbo-admin_access_log_4000." suffix=".txt" pattern="%t %h %l %u %r %s %b %I %D %{X-Cluster-Client-Ip}i" resolveHosts="false" />
<Context path="" docBase="/usr/local/zhanglin/logistics/bbo-admin" debug="0" reloadable="false"/>
</Host>
bbo.properties
#vi /usr/local/zhanglin/logistics/bbo-admin/webapps/ROOT/WEB-INF/bbo.properties
vi /usr/local/zhanglin/logistics/bbo-admin/WEB-INF/bbo.properties
#bbo.registry.address=zookeeper://127.0.0.1:2181
bbo.registry.address=zookeeper://172.20.32.211:2181?backup=172.20.32.143:2181,172.20.32.143:2182
bbo.admin.root.password=root
bbo.admin.guest.password=guest
3. 啟動
./bin/startup.sh
4. 停止
./bin/shutdown.sh
5. 訪問:
(用戶:root,密碼:root 或 用戶:guest,密碼:guest)
http://10.0.30.138:4000/
㈣ 使用bbox開源技術框架能申請專利嗎
軟體申請專利,重點在於1)解決的技術問題,3)產生的技術效果,2)通過的技術手段,比如據傳輸或處理方法、如何執行命令的方法都可以申請發明類專利,GUI(用戶交互界面)申請外觀類專利。
比如最近我手頭在處理的加速視頻解編碼的技術。
您要重視的是開源的框架保留的權利(如是否在此框架基礎上產生的財產權)。
㈤ 怎麼用myeclipse對bbo admin進行打包
說明:打開Cmd,然後進入解壓路徑 工程路徑:下載bo-masterbo-masterbo-admin,只需要編譯bbo-admin即可,有什麼依賴的,maven會自動拉取解決。
整個過程如下:
1,通過cmd進入目錄,輸入命令
㈥ Zookeeper在hadoop中充當什麼角色,bbo使用zookeeper又是幹嘛的
Apache Zookeeper是我最近遇到的最酷的技術,我是在研究Solr Cloud功能的時候發現的。Solr的分布式計算讓我印象深刻。你只要開啟一個新的實例就能自動在Solr Cloud中找到。它會將自己分派到某個分片中,並確定出自己是一個Leader(源)還是一個副本。不一會兒,你就可以在你的那些伺服器上查詢到了。即便某些伺服器宕機了也可以繼續工作。非常動態、聰明、酷。
將運行多個應用程序作為一個邏輯程序並不是什麼新玩意。事實上,我在幾年前就已寫過類似的軟體。這種架構比較讓人迷惑,使用起來也費勁。為此Apache Zookeeper提供了一套工具用於管理這種軟體。
為什麼叫Zoo?「因為要協調的分布式系統是一個動物園」。
在本篇文章中,我將說明如何使用php安裝和集成Apache ZooKeeper。我們將通過service來協調各個獨立的PHP腳本,並讓它們同意某個成為Leader(所以稱作Leader選舉)。當Leader退出(或崩潰)時,worker可檢測到並再選出新的leader。
ZooKeeper是一個中性化的Service,用於管理配置信息、命名、提供分布式同步,還能組合Service。所有這些種類的Service都會在分布式應用程序中使用到。每次編寫這些Service都會涉及大量的修bug和競爭情況。正因為這種編寫這些Service有一定難度,所以通常都會忽視它們,這就使得在應用程序有變化時變得難以管理應用程序。即使處理得當,實現這些服務的不同方法也會使得部署應用程序變得難以管理。
雖然ZooKeeper是一個Java應用程序,但C也可以使用。這里就有個PHP的擴展,由Andrei Zmievski在2009創建並維護。你可以從PECL中下載,或從GitHub中直接獲取PHP-ZooKeeper。
要使用該擴展你首先要安裝ZooKeeper。可以從官方網站下載。
$ tar zxfv zookeeper-3.4.5.tar.gz
$ cd zookeeper-3.4.5/src/c
$ ./configure --prefix=/usr/
$ make
$ sudo make install
這樣就會安裝ZooKeeper的庫和頭文件。現在准備編譯PHP擴展。
$ cd$ git clone https://github.com/andreiz/php-zookeeper.git
$ cd php-zookeeper
$ phpize
$ ./configure
$ make
$ sudo make install
將「zookeeper.so」添加到PHP配置中。
$ vim /etc/php5/cli/conf.d/20-zookeeper.ini
因為我不需要運行在web服務環境下,所以這里我只編輯了CLI的配置。將下面的行復制到ini文件中。
extension=zookeeper.so
使用如下命令來確定擴展是否已起作用。
$ php -m | grep zookeeper
zookeeper
現在是時候運行ZooKeeper了。目前唯一還沒有做的是配置。創建一個用於存放所有service數據的目錄。
$ mkdir /home/you-account/zoo
$ cd$ cd zookeeper-3.4.5/
$ cp conf/zoo_sample.cfg conf/zoo.cfg
$ vim conf/zoo.cfg
找到名為「dataDir」的屬性,將其指向「/home/you-account/zoo」目錄。
$ bin/zkServer.sh start
$ bin/zkCli.sh -server 127.0.0.1:2181[zk: 127.0.0.1:2181(CONNECTED) 14] create /test 1
Created /test[zk: 127.0.0.1:2181(CONNECTED) 19] ls /[test, zookeeper]
此時,你已成功連到了ZooKeeper,並創建了一個名為「/test」的znode(稍後我們會用到)。ZooKeeper以樹形結構保存數據。這很類似於文件系統,但「文件夾」(譯者註:這里指非最底層的節點)又和文件很像。znode是ZooKeeper保存的實體。Node(節點)的說法很容易被混淆,所以為了避免混淆這里使用了znode。
因為我們稍後還會使用,所以這里我們讓客戶端保持連接狀態。開啟一個新窗口,並創建一個zookeeperdemo1.php文件。
<?php
class ZookeeperDemo extends Zookeeper {
public function watcher( $i, $type, $key ) {
echo "Insider Watcher\n";
// Watcher gets consumed so we need to set a new one
$this->get( '/test', array($this, 'watcher' ) );
}
}
$zoo = new ZookeeperDemo('127.0.0.1:2181');$zoo->get( '/test', array($zoo, 'watcher' ) );
while( true ) {
echo '.';
sleep(2);}
現在運行該腳本。
$ php zookeeperdemo1.php
此處應該會每隔2秒產生一個點。現在切換到ZooKeeper客戶端,並更新「/test」值。
[zk: 127.0.0.1:2181(CONNECTED) 20] set /test foo
這樣就會靜默觸發PHP腳本中的「Insider Watcher」消息。怎麼會這樣的?
ZooKeeper提供了可以綁定在znode的監視器。如果監視器發現znode發生變化,該service會立即通知所有相關的客戶端。這就是PHP腳本如何知道變化的。Zookeeper::get方法的第二個參數是回調函數。當觸發事件時,監視器會被消費掉,所以我們需要在回調函數中再次設置監視器。
現在你可以准備創建分布式應用程序了。其中的挑戰是讓這些獨立的程序決定哪個(是leader)協調它們的工作,以及哪些(是worker)需要執行。這個處理過程叫做leader選舉,在ZooKeeper Recipes and Solutions你能看到相關的實現方法。
這里簡單來說就是,每個處理(或伺服器)緊盯著相鄰的那個處理(或伺服器)。如果一個已被監視的處理(也即Leader)退出或者崩潰了,監視程序就會查找其相鄰(此時最老)的那個處理作為Leader。
在真實的應用程序中,leader會給worker分配任務、監控進程和保存結果。這里為了簡化,我跳過了這些部分。
創建一個新的PHP文件,命名為worker.php。
<?php
class Worker extends Zookeeper {
const CONTAINER = '/cluster';
protected $acl = array(
array(
'perms' => Zookeeper::PERM_ALL,
'scheme' => 'world',
'id' => 'anyone' ) );
private $isLeader = false;
private $znode;
public function __construct( $host = '', $watcher_cb = null, $recv_timeout = 10000 ) {
parent::__construct( $host, $watcher_cb, $recv_timeout );
}
public function register() {
if( ! $this->exists( self::CONTAINER ) ) {
$this->create( self::CONTAINER, null, $this->acl );
}
$this->znode = $this->create( self::CONTAINER . '/w-',
null,
$this->acl,
Zookeeper::EPHEMERAL | Zookeeper::SEQUENCE );
$this->znode = str_replace( self::CONTAINER .'/', '', $this->znode );
printf( "I'm registred as: %s\n", $this->znode );
$watching = $this->watchPrevious();
if( $watching == $this->znode ) {
printf( "Nobody here, I'm the leader\n" );
$this->setLeader( true ); }
else {
printf( "I'm watching %s\n", $watching );
}
}
public function watchPrevious() {
$workers = $this->getChildren( self::CONTAINER );
sort( $workers );
$size = sizeof( $workers );
for( $i = 0 ; $i < $size ; $i++ ) {
if( $this->znode == $workers[ $i ] ) {
if( $i > 0 ) {
$this->get( self::CONTAINER . '/' . $workers[ $i - 1 ], array( $this, 'watchNode' ) );
return $workers[ $i - 1 ];
}
return $workers[ $i ];
}
}
throw new Exception( sprintf( "Something went very wrong! I can't find myself: %s/%s",
self::CONTAINER,
$this->znode ) );
}
public function watchNode( $i, $type, $name ) {
$watching = $this->watchPrevious();
if( $watching == $this->znode ) {
printf( "I'm the new leader!\n" );
$this->setLeader( true );
}
else {
printf( "Now I'm watching %s\n", $watching ); }
}
public function isLeader() {
return $this->isLeader;
}
public function setLeader($flag) {
$this->isLeader = $flag;
}
public function run() {
$this->register();
while( true ) {
if( $this->isLeader() ) {
$this->doLeaderJob();
}
else {
$this->doWorkerJob();
}
sleep( 2 );
}
}
public function doLeaderJob() {
echo "Leading\n";
}
public function doWorkerJob() {
echo "Working\n";
}
}
$worker = new Worker( '127.0.0.1:2181' );$worker->run();
打開至少3個終端,在每個終端中運行以下腳本:
# term1
$ php worker.php
I'm registred as: w-0000000001Nobody here, I'm the leader
Leading
# term2
$ php worker.php
I'm registred as: w-0000000002I'm watching w-0000000001
Working
# term3
$ php worker.php
I'm registred as: w-0000000003I'm watching w-0000000002
Working
現在模擬Leader崩潰的情形。使用Ctrl+c或其他方法退出第一個腳本。剛開始不會有任何變化,worker可以繼續工作。後來,ZooKeeper會發現超時,並選舉出新的leader。
雖然這些腳本很容易理解,但是還是有必要對已使用的Zookeeper標志作注釋。
$this->znode = $this->create( self::CONTAINER . '/w-', null, $this->acl, Zookeeper::EPHEMERAL | Zookeeper::SEQUENCE );
每個znode都是EPHEMERAL和SEQUENCE的。
EPHEMRAL代表當客戶端失去連接時移除該znode。這就是為何PHP腳本會知道超時。SEQUENCE代表在每個znode名稱後添加順序標識。我們通過這些唯一標識來標記worker。
在PHP部分還有些問題要注意。該擴展目前還是beta版,如果使用不當很容易發生segmentation fault。比如,不能傳入普通函數作為回調函數,傳入的必須為方法。我希望更多PHP社區的同仁可以看到Apache ZooKeeper的好,同時該擴展也會獲得更多的支持。
ZooKeeper是一個強大的軟體,擁有簡潔和簡單的API。由於文檔和示例都做的很好,任何人都可以很容易的編寫分布式軟體。讓我們開始吧,這會很有趣的。
㈦ zookeeper和bbo都是分布式服務框架嗎
zookeeper是注冊中心,用來管理提供者和消費者的,包括軟負載均衡等;DUBBO是一個SOA分布式框架,它也用到的ZOOKEEPER,其它的HADOOP等也用到的這個注冊中心
㈧ 如何解決控制台一直列印bboserverhandler
cd命令用於進入某個文件夾或目錄。 想進入C盤根目錄: cd C: //這就進入了C盤 同理如果想進入java目錄:cd X:xxxx/xxxx/xxxx/bin //cd+"空格"+"java目錄路徑" cd是最簡單的doc命令之一,不會用cd命令的話我真擔心你以後能不能學好編程。。。
㈨ 怎麼優雅關閉bbo服務命令
bbo 代碼已包含優雅關閉的代碼,非kill -9強行關閉,程序都執行優雅關閉,會先下zk,再完成剩餘任務後關閉。
windows不好模擬~
㈩ bbo main啟動為什麼wait
啟動的參數,有問題,是否傳遞了正確的命令行參數
————————————