天天看點

淘寶(taobao)HSF架構

涓€銆佽儗鏅?

聽聽聽聽聽 闅忕潃缃戠珯璁塊棶閲忓鍔狅紝浠呬粎闈犲鍔犳満鍣ㄥ凡涓嶈兘婊¤凍绯葷粺鐨勮姹傦紝浜庢槸闇€瑕佸搴旂敤绯葷粺杩涜鍨傜洿鎷嗗垎鍜屾按骞蟲媶鍒嗐€傚湪鎷嗗垎涔嬪悗锛屽悇涓鎷嗗垎鐨勬ā鍧楀浣曢€氫俊锛熷浣曚繚璇佹€ц兘锛熷浣曚繚璇佸悇涓簲鐢ㄩ兘浠ュ悓鏍風殑鏂瑰紡浜や簰锛熻繖灏遍渶瑕佷竴绉嶈礋璐e悇涓媶鍒嗙殑妯″潡闂撮€氫俊鐨勯珮鎬ц兘鏈嶅姟妗嗘灦(HSF)銆?

浜屻€丠SF鍋氱殑浜嬫儏

1. 鏍囧噯Service鏂瑰紡鐨凴PC

聽聽聽 1锛? service瀹氫箟锛氬熀浜嶰SGI鐨剆ervice瀹氫箟鏂瑰紡

聽聽聽 2锛? TCP/IP閫氫俊锛?

聽聽聽聽聽聽聽聽聽聽 IO鏂瑰紡锛歯io,閲囩敤mina妗嗘灦

聽聽聽聽聽聽聽聽聽聽 杩炴帴鏂瑰紡锛氶暱杩炴帴

聽聽聽聽聽聽聽聽聽聽 鏈嶅姟鍣ㄧ鏈夐檺瀹氬ぇ灏忕殑杩炴帴姹?

聽聽聽聽聽聽聽聽聽聽 WebService鏂瑰紡

聽聽聽 3锛? 搴忓垪鍖栵細hessian搴忓垪鍖栨満鍒?

2. 杞歡璐熻澆浣撶郴

聽聽聽 閲囩敤杞歡瀹炵幇璐熻澆鍧囪 锛屾敮鎸侀殢鏈恒€佽疆璇€佹潈閲嶃€佹寜搴旂敤璺敱绛夋柟寮忋€傝蔣浠惰礋杞藉潎琛℃病鏈変腑闂寸偣锛岄€氳繃閰嶇疆涓績缁熶竴绠$悊銆傞厤缃腑蹇冩敹闆嗘湇鍔℃彁渚涜€呭拰娑堣垂鑰呯殑娉ㄥ唽淇℃伅锛屼互鎺ㄩ€佺殑鏂瑰紡鍙戦€佸埌鏈嶅姟娑堣垂鑰呯洿鎺ヤ嬌鐢紝涓嶇粡杩囦腑闂寸偣锛涙敞鍐屼腑蹇冨彲浠ユ劅搴旀湇鍔″櫒鐨勭姸鎬侊紝鍑虹幇failover鏃訛紝瀹炵幇娉ㄥ唽淇℃伅閲嶆柊鎺ㄩ€併€?

3. 妯″潡鍖栥€佸姩鎬佸寲

4. 鏈嶅姟娌葷悊

聽聽聽 鏈嶅姟娌葷悊鍒╃敤娉ㄥ唽涓績瀹炵幇鏈嶅姟淇℃伅绠$悊锛堟湇鍔℃彁渚涜€呫€佽皟鐢ㄨ€呬俊鎭煡璇級銆佹湇鍔′緷璧栧叧绯誨垎鏋愩€佹湇鍔¤繍琛岀姸鍐墊劅鐭ャ€佹湇鍔″彲鐢ㄦ€т繚闅滐紝濡傦細璺敱璋冩暣銆佹祦閲忓垎閰嶃€佹湇鍔$闄嶇駭銆佽皟鐢ㄧ闄嶇駭绛?

鏈枃鏉ヨ嚜CSDN鍗氬锛岃漿杞借鏍囨槑鍑哄锛歨ttp://blog.csdn.net/marine2010/archive/2010/03/21/5401366.aspx

涓夈€佸簲鐢?

鑳屾櫙: WEBX -- 闃塊噷宸村反缃戠珯鎵€閲囩敤鐨刉EB搴旂敤妗嗘灦.

HSF鎺ュ彛: com.taobao.item.service.ItemQueryService

闇€姹? 鏍規嵁鍟嗗搧ID鍙栧緱鍟嗗搧淇℃伅

杞戒綋: TBCMS绯葷粺

瀹炵幇姝ラ:

1. 鍒涘緩 /bundle/war/src/webroot/META-INF/autoconf/item-hsf-xml.vm

浠g爜:

<?xml version="1.0" encoding="GB2312"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans default-autowire="byName">
  <bean id="itemQueryService" class="com.taobao.hsf.app.spring.util.HSFSpringConsumerBean" init-method="init">
   <property name="interfaceName">
    <value>com.taobao.item.service.ItemQueryService</value>
   </property>
   <property name="version">
    <value>${item_provide_service_version}</value>
   </property>
   <!--asyncallMethods涓哄彲閫夐厤缃甗List]锛屽惈涔変負璋冪敤姝ゆ湇鍔℃椂闇€瑕侀噰鐢ㄥ紓姝ヨ皟鐢ㄧ殑鏂規硶鍚嶅垪琛紝榛樿涓虹┖闆嗗悎锛屽嵆鎵€鏈夋柟娉曢兘閲囩敤鍚屾璋冪敤-->
   <property name="asyncallMethods">
    <list>
</list>
</property>
</bean>

</beans>  
           

2.鍏朵腑:聽${item_provide_service_version} 闇€瑕佸湪 auto-config.xml 涓厤缃?鍦?<group name="arkcms-bundle-war"> ...</group>涓鍔?

<property name="item.provide.service.version" defaultValue="1.0.0.daily" desc="itemClient璋冪敤鐗堟湰"/>
           

鍚屾椂鍦?<script>...</script>涓鍔?

<generate template="item-hsf.xml.vm" destfile="WEB-INF/biz/bean/item-hsf.xml" charset="GBK"/>

           

3.鍦?bundle/war/src/webroot/WEB-INF/cms-biz-services.xml涓鍔?

<service name="BeanFactoryService" class="com.alibaba.service.spring.DefaultBeanFactoryService">
            <property name="bean.descriptors">

                     ....................

                    <value>/cms/biz/bean/item-hsf.xml</value>
            </property>
        </service>
           

鑷蟲,鎴戜滑宸茬粡寮曞叆浜咺temQueryService鐨凥SF鏈嶅姟.

4. 鎺ヤ笅鏉ユ垜浠氨瑕佸仛Servlet鎺ュ彛浜?褰撶劧鍐欎竴涓猻ervlet鐩存帴璋冪敤hsf涔熸槸鍙互鐨?浣嗘槸浠庣粨鏋勮€冭檻,鎴戜滑杩樻槸鍏堟湰鍦闆皝瑁呬竴灞傚厛.

浣嗘槸棣栧厛,闇€瑕佸 /all/project.xml 涓渶瑕佸鍔犲ItemQueryService鐨勬敮鎸?

<projects name="taobao/itemcenter" version="1.9.5">
     <project id="taobao/itemcenter/itemcenter-client"/>
     <project id="taobao/itemcenter/itemcenter-common"/>
    </projects>
           

骞跺湪/biz/project.xml鍜?web/project.xml涓鍔?

<?xml version="1.0" encoding="GB2312"?>

<project id="tbcms/web" extends="../all/project.xml">
    <build>
        <dependencies>
                  ............
        <include uri="taobao/itemcenter/itemcenter-client"/>
        <include uri="taobao/itemcenter/itemcenter-common"/>
        </dependencies>
    </build>
</project>
           

鍛戒護琛屾ā寮忎笅鎵ц:antx reactor goals=eclipse鏉ユ墽琛屽渚濊禆鍖呯殑瑁呰澆.(鍓嶆彁鏄/antx/repository.project/taobao/itemcenter/杩涜SVN鏇存柊)

鏈湴灏佽: 鍦?biz/src/java/com/ark/cms/biz/util/item/涓嬪垱寤篒temService.java鎺ュ彛:

package com.ark.cms.biz.util.item;

import com.taobao.item.domain.DbRoute;
import com.taobao.item.domain.query.ItemIdDO;
import com.taobao.item.domain.result.ItemResultDO;
import com.taobao.item.exception.IcException;
/**
 * 鏍規嵁id鍙栧緱鍟嗗搧淇℃伅
 * @author duxing
 *
 */
public interface ItemService {
 public ItemResultDO getItemById(ItemIdDO itemId,DbRoute mainDbRoute) throws IcException;
}
 

鍦╞iz/src/java/com/ark/cms/biz/util/item/impl/涓?ItemServiceImpl.java杩涜瀹炵幇:

package com.ark.cms.biz.util.item.impl;

import com.ark.cms.biz.util.item.ItemService;
import com.taobao.item.domain.DbRoute;
import com.taobao.item.domain.query.ItemIdDO;
import com.taobao.item.domain.query.QueryItemOptionsDO;
import com.taobao.item.domain.result.ItemResultDO;
import com.taobao.item.exception.IcException;
import com.taobao.item.service.ItemQueryService;

/**
 * 鏍規嵁id鍙栧緱鍟嗗搧淇℃伅 瀹炵幇
 * @author duxing
 *
 */

public class ItemServiceImpl implements ItemService {

 private ItemQueryService itemQueryService;

 public void setItemQueryService(ItemQueryService itemQueryService) {
  this.itemQueryService = itemQueryService;
 }

 @SuppressWarnings("deprecation")
 public ItemResultDO getItemById(ItemIdDO itemId, DbRoute mainDbRoute) throws IcException {
  QueryItemOptionsDO options = null;
  return itemQueryService.queryItemById(itemId, options, mainDbRoute);
 }

}
           

鐒跺悗灏嗘鎺ュ彛绉諱氦缁檚pring,鍦?bundle/war/src/webroot/META-INF/autoconf/item-hsf-xml.vm涓鍔?锛?

<bean id="itemService" class="com.ark.cms.biz.util.item.impl.ItemServiceImpl"></bean>
           

鑷蟲,鎴戜滑宸茬粡鍦╯pring涓駭鐢熶竴涓猧temService

5.鎺ヤ笅鏉ュ垱寤簊ervlet

鍦?web/src/java/com/ark/cms/web/涓嬪垱寤篒temServiceServlet.java

鍥犱負servlet涓笉鑳界洿鎺ョ敤set褰㈠紡璁﹕pring鏉et itemService杩涙潵,鎵€浠ュ彧鑳介噰鐢ㄤ竴涓嬫柟娉曡幏鍙杋temService:

BeanFactoryService beanFactory = (BeanFactoryService) BizServiceManager.getInstance().getService(BeanFactoryService.SERVICE_NAME);
  ItemService itemService = (ItemService) beanFactory.getBean("itemService");
           

瀹屾暣浠g爜濡備笅:

package com.ark.cms.web;

import java.io.IOException;
import java.io.OutputStream;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.alibaba.service.spring.BeanFactoryService;
import com.ark.cms.biz.core.BizServiceManager;
import com.ark.cms.biz.util.item.ItemService;
import com.taobao.item.domain.DbRoute;
import com.taobao.item.domain.ItemDO;
import com.taobao.item.domain.query.ItemIdDO;
import com.taobao.item.domain.result.ItemResultDO;
import com.taobao.item.exception.IcException;


/**
 * 鏍規嵁id鍙栧緱鍟嗗搧澶у浘鐨勬帴鍙? * @author duxing
 *
 */
public class ItemServiceServlet extends HttpServlet {

 private static final long serialVersionUID = -3348559907279438489L;

 @Override
 protected void doPost(HttpServletRequest request,
   HttpServletResponse response) throws ServletException, IOException {
// http://item.taobao.com/auction/item_detail-db1-67af640ba3f16a2006cd63f1f...
// long itemId=4399800173l;

  String item_id = request.getParameter("item_id");

  String xid = request.getParameter("xid");
  DbRoute mainDbRoute=DbRoute.getDbRouteByXid(xid);

  ItemIdDO itemIDDO=new ItemIdDO();
  if(item_id!=null){
   itemIDDO.setItemIdStr(item_id);
  }
  if(request.getParameter("item_num_id")!=null){
   Long item_num_id = Long.valueOf(request.getParameter("item_num_id"));
   itemIDDO.setItemId(item_num_id);
  }
  if(request.getParameter("id")!=null){
   Long id = Long.valueOf(request.getParameter("id"));
   itemIDDO.setItemId(id);
  }
// 涓ょid鐨勪紶鍏ユ柟寮?// itemIDDO.setItemId(itemId);
// itemIDDO.setItemIdStr("67af640ba3f16a2006cd63f1f5dddc271");

  ItemResultDO itemResultDO;
  BeanFactoryService beanFactory = (BeanFactoryService) BizServiceManager.getInstance().getService(BeanFactoryService.SERVICE_NAME);
  ItemService itemService = (ItemService) beanFactory.getBean("itemService");
  try {
   itemResultDO=itemService.getItemById(itemIDDO, mainDbRoute);
  } catch (IcException e) {
   e.printStackTrace();
   itemResultDO=new ItemResultDO();
  }

  ItemDO itemDO=itemResultDO.getItem();
  byte[] result="".getBytes();
  if(itemDO!=null){
   result=itemDO.getPictUrl().getBytes();
  }
  response.setContentType("text/xml;charset=gb2312");
  response.setContentLength(result.length);
  OutputStream out = response.getOutputStream();
  out.write(result);
  out.flush();

 }
}
           

6.servlet鍐欏ソ浜嗕箣鍚庢垜浠氨瑕侀厤缃繘WEBX浜?

鍦?/bundle/war/src/webroot/META-INF/autoconf/web.xml.vm涓鍔?

<servlet-mapping>

        <servlet-name>ItemServiceServlet</servlet-name>
        <url-pattern>/item/query</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>ItemServiceServlet</servlet-name>
        <servlet-class>com.ark.cms.web.ItemServiceServlet</servlet-class>
    </servlet>
           

7.鑷蟲,寮€鍙戝畬鎴惵?

鍛戒護琛屾ā寮忎笅鎵ц:antx reactor goals=clean,default鏉ュ椤圭洰閲嶆柊缂栬瘧鎵撳寘.閲嶅惎鏈湴鏈嶅姟鍣ㄨ繘琛屾祴璇?

瀵?item/query鎺ュ彛杩涜post鐨勬椂鍊欒Е鍙戞servlet.

鍘熸枃閾炬帴锛歨ttp://www.cnblogs.com/mengheyun/archive/2010/12/16/1963077.html