±à¼ÍƼö: |
ÎÄÕÂÖ÷Òª½éÉÜÁË΢·þÎñ¿ª·¢µÄ·½Ê½ ¼°ÈëÃ۸ÀýÀ´Ñ§Ï°ServiceComb,°üº¬Ôõô½øÐй¤³ÌµÄ´´½¨¡£
±¾ÎÄÀ´×ÔÓÚcsdn£¬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼¡¢ÍƼö¡£ |
|
ServiceCombÊÇ»ªÎª2017Ä꿪ԴµÄ΢·þÎñ¿ò¼Ü£¬ServiceCombÔÚ»ªÎªÄÚ²¿µÄʵ¼ùÖгÁµíÁ˷ḻµÄÆóÒµ¼¶Ó¦Óÿª·¢¾Ñ飬¸ÃÏîÄ¿ÒÑÓÚ2017Äê12Ô½øÈëApache·õ»¯Æ÷¡£×¢Ò⣺ServiceCombÊÇ»ªÎª¿ªÔ´µÄ£¬»ªÎªÈ·ÊµºÜÀ÷º¦°¡¡£»ªÎª°ÑËû¹±Ï׸øÁËApache£¬ÏÖÔÚÒѾ³ÉΪÁËApacheµÄ¶¥¼¶ÏîÄ¿¡£Apache
ServiceCombµÄ¹ÙÍøµØÖ·£¨×¢Ò⣺¹ÙÍøÌṩÖÐÎİæÅ¶£¬¶ÔÓÚÓ¢Óï²»ºÃµÄÅóÓÑ£¬ÕâÊÇÒ»¸ö¸£Òô£¬±Ï¾¹ÊÇÔÛÖйúÈË×Ô¼º¿ª·¢µÄ°¡£©¡£
΢·þÎñ¿ª·¢µÄ·½Ê½Ö÷ÒªÓÐÒ»ÏÂÈýÖÖ£º
1¡¢dubbo+zookeeper
2¡¢spring boot+spring cloud
3¡¢ServiceComb
ÄÇô£¬ServiceCombºÍSpring cloudÏà±ÈÓÐʲôÓŵãÄØ£¿Ö÷ÒªµÄÓŵãÓÐÒÔϼ¸µã£º
1¡¢ServiceCombÖ§³ÖµÄͨÐÅÐÒé±ÈSpringCloud¶à¡£ServiceCombÖ§³Ö¶àÖÖͨÐÅÐÒé,
Rest¡¢Highway£¨RPC£©µÈ
SpringCloud½öÖ§³ÖRest¡£
2¡¢Ïà±ÈSpringCloudµÄRestÐÒ飬Highway£¨RPC£©ÐÒéÐÔÄܸü¸ß£¬HighwayÊÇ»ùÓÚ¶þ½øÖƵÄÐòÁл¯·½Ê½´«ÊäÊý
¾Ý£¬²ÉÓöþ½øÖƱàÂëµÄϵͳµÄÐÔÄÜÔ¶¸ßÓÚ²ÉÓÃÎı¾µÄHTTPÐÒé¡£
3¡¢ServiceCombµÄÉÌÒµ°æ±¾CSEÏà±ÈSpringCloud²»½öÌṩÁË΢·þÎñ¿ª·¢¿ò¼Ü£¬»¹ÌṩÁË΢·þÎñÔÆ²¿Ê𣬹ÜÀí¡¢ÖÎ
ÀíµÈһվʽ½â¾ö·½°¸¡£
4¡¢»¹ÓÐÕâÊÇÖйúÈË¿ª·¢µÄ£¬¹ÙÍø¶¼ÌṩÁËÖÐÎÄÎĵµ£¬¶ÔÓÚÎÒÃÇѧϰÕßÀ´ËµÕâÒ²ÊÇÒ»´óºÃ´¦°¡¡£
ÏÂÃæÎÒÃǾÍͨ¹ýÒ»¸ö¼òµ¥µÄÈëÃ۸ÀýÀ´Ñ§Ï°ServiceComb£º
ΪÁËÄܹ»Ê¹¿ª·¢Õß¿ÉÒÔ¿ìËÙ¹¹½¨ServiceCombÓ¦ÓóÌÐò£¬ÎªÎÒÃÇÌṩÁËÒ»Ì×½ÅÊּܣ¬ÕâÑùÄܹ»·½±ãѧϰÕß¼°Ó¦Óÿª·¢Õß¿ìËÙÈëÃÅ£¬Í¬Ê±¼«´óµÄÌá¸ßÁËЧÂÊ¡£
1.·ÃÎÊ¿ìËÙ¿ª·¢Òýµ¼Ò³£ºhttp://start.servicecomb.io/

ºóÃæÎÒÃǾͿÉÒÔÌîд¹¤³ÌÏà¹ØÄÚÈÝ£¬×îºó¾Í¿ÉÒÔÉú³É´úÂëÁË¡£
½âѹ¹¤³Ì£¬µ¼Èëµ½Idea¹¤¾ßÖУ¬È»ºó±àд×Ô¼ºµÄÒµÎñ´úÂë¾Í¿ÉÒÔÁË¡£
ÉÏÃæµÄ·½Ê½¸ü¿ìËÙ£¬¸ü¼òµ¥µÄ´´½¨Ò»¸öServiceCombµÄ°¸Àý£¬µ«ÊÇÎÒ¾õµÃÒª¸üºÃµÄÁ˽⣬¾ÍÓ¦¸Ã´ÓÁ㿪ʼ£¬Ò»²½Ò»²½µÄÈ¥´î½¨¹¤³Ì£¬±àд´úÂ룬ËùÒÔÏÂÃæ¾Í¿ªÊ¼Ò»²½Ò»²½µÄÀ´ÊµÏÖ£º
¿ª·¢»·¾³£ºIDEA£¬JDK1.8ÒÔÉÏ£¬maven 3.3.0ÒÔÉÏ
Ê×ÏÈÎÒÃÇÐèÒªÏÂÔØ¹ÙÍøÌṩµÄ×¢²áÖÐÐÄ£¬ÏÂÔØ
ÏÂÔØÈçÏ£º

ÏÂÔØµ½±¾µØºó£¬½âѹ£¨²»Òª½âѹµ½ÖÐÎÄĿ¼Ï£©£¬Ä¿Â¼½á¹¹ÈçÏ£º

½¨Òéÿ´Î¶¼Æô¶¯ÕâÁ½¸ö³ÌÐò¡£Ç°Ì¨·ÃÎʵØÖ·£ºhttp://127.0.0.1:30103£¬ºǫ́µØÖ·ÊÇ£ºhttp://127.0.0.1:30100
ÏÂÃæ½øÐй¤³ÌµÄ´´½¨£º
1¡¢´´½¨¸¸¹¤³ÌHelloWorldDemo
1.1 ÔÚIDEA¿ª·¢¹¤¾ßÖУ¬µã»÷file¡ª¡ª¡·new¡ª¡ª¡·project

µã»÷next½øÈëÏÂÒ»²½£¬ÌîдºÃGroupIdºÍArtifactId£¬¼ÌÐøµã»÷next½øÈëÏÂÒ»²½£¬½øÈëmavenµÄÅäÖãº

ÅäÖúÃ×Ô¼ºµÄmaven£¬È»ºóµã»÷next£¬Ö±µ½finish¼´¿É¡£ÎÒÕâÀïÖ»½²ÁËÖØÒªµÄ²¿·Ö£¬ÆäËûµÄ´´½¨ÎÒÏàÐÅ´ó¼Ò¶¼ÖªµÀ£¬Èç¹û²»Çå³þµÄ×ÔÐвéÕÒ×ÊÁÏ¡£
ÔÚpom.xmlÎļþÖÐÌí¼ÓÈçϵÄÒÀÀµ£º
<parent> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.12.RELEASE</version>
<relativePath/> <!-- lookup parent from
repository --> </parent>
<properties> <project.build.sourceEncoding> UTF-8 </project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties> <!--1.ʵÏÖpomÎļþµ¼Èë-->
<dependencyManagement> <dependencies>
<dependency> <groupId>org.apache.servicecomb</groupId>
<artifactId>java-chassis-dependencies</artifactId>
<version>1.0.0-m2</version> <type>pom</type>
<scope>import</scope> </dependency>
</dependencies> </dependencyManagement>
<build> <plugins> <plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin> </plugins> </build> |
2¡¢´´½¨api½Ó¿ÚÄ£¿é
2.1 ÎÒÃÇÔÚ¸¸¹¤³ÌµÄ»ù´¡ÉÏ£¬´´½¨Ò»¸öapiµÄ½Ó¿Ú¹¤³Ì£¬²½ÖèÈçÏ£º
Ñ¡Ôñ¸¸¹¤³ÌµÄ»ù´¡ÉÏ£¬µã»÷file¡ª¡ª¡·new¡ª¡ª¡·module£¬Ñ¡Ôñmaven£¬Ö±½Óµã»÷next£¨²»ÐèҪѡÔñ¹Ç¼Ü£©£¬È»ºóÌîдArtifactId£ºhello-world-api£¬µã»÷next£¬Ö±µ½finish¼´¿É¡£¹¤³Ì½á¹¹ÈçÏ£º

Õâ¸öʱºòµÄjavaºÍresourcesûÓбíÃ÷ÊÇÔ´´úÂëºÍÅäÖÃÎļþ×ÊԴĿ¼£¬ÎÒÃÇÐèÒªÊÖ¶¯×ªÒ»Ï£¬ÓÒ»÷java£¬»á³öÏÖÈçÏÂÁÐ±í£º

ÎÒÃÇÑ¡ÔñµÚÒ»¸öSources Root£¬Í¬Àí£¬resourcesĿ¼ҲÊÇÓÒ»÷£¬È»ºóÑ¡ÔñResouces
Root£¬²Ù×÷Íê³ÉÖ®ºó£¬Ä¿Â¼±ä»¯ÈçÏ£º

×¢Ò⣺֮ºóÎÒÃÇ´´½¨µÄÆäËû¹¤³Ì£¬¶¼ÐèÒª½øÐÐÕâÒ»²½²Ù×÷£¬ÐèÒª×ÔÐÐÈ¥²Ù×÷Íê³É£¬²»ÔÙ׸Êö²½Öè¡£
2.2 È»ºó£¬ÎÒÃǾÍÔÚapi¹¤³ÌÖÐÌí¼ÓÒ»¸ö½Ó¿Ú£º
2.2.1 ´´½¨Ò»¸ö°ü£ºcom.zdw.helloworld.api
2.2.2 ´´½¨Ò»¸ö½Ó¿Ú£ºHelloWorldInterfaces£¬ÄÚÈÝÈçÏ£º
package com.zdw.helloworld.api;
/**
* Create By zdw on 2019/6/24
*/
public interface HelloWorldInterfaces {
String sayHello(String name);
} |
2.2.3 ÎÒÃÇÒª°Ñapi¹¤³ÌÖ´ÐÐinstall£¬°²×°µ½±¾µØ£¬ÒòΪ½ÓÏÂÀ´ÎÒÃÇµÄÆäËû¹¤³ÌÒªÒÀÀµÕâ¸ö¹¤³ÌµÄ¡£
×¢Ò⣬ִÐÐinstallÃüÁîµÄʱºò£¬ÎÒÃÇÏȰѸ¸¹¤³ÌµÄpomÎļþÖÐµÄ <build> ²¿·Ö×¢Ê͵ô£¬·ñÔò»áʧ°Ü£¬Ö´ÐÐÍêinstallÖ®ºóÔÙ·Å¿ª¡£
3¡¢´´½¨·þÎñÌṩÕßÄ£¿éprovider
3.1 ¸úÉÏÃæµÄÒ»Ñù£¬ÔÚ¸¸¹¤³Ì´´½¨Ò»¸öÄ£¿é£ºhello-world-provider
3.2 ÔÚÄ£¿éµÄpom.xmlÎļþÖУ¬Ìí¼ÓÈçÏÂÒÀÀµ£º
<dependencies>
<!--hibernateУÑ鹿Ôò--> <dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency> <!--restÖ§³Ö-->
<dependency> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency> <!--ServiceCombÌṩµÄÖ§³Ö-->
<dependency> <groupId>org.apache.servicecomb</groupId>
<artifactId>spring-boot-starter-provider</artifactId>
</dependency> <!--springbootÓëwebÕûºÏ-->
<dependency> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>com.zdw</groupId> <artifactId>hello-world-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency> </dependencies> |
3.3 ÔÚresourcesĿ¼ÏÂÃæ´´½¨microservice.yamlÅäÖÃÎļþ£¬ÀïÃæµÄÄÚÈÝÈçÏ£º
APPLICATION_ID:
helloworlddemo
service_description:
name: demo-provider
version: 1.0.0
servicecomb:
rest:
address: 0.0.0.0:9000
service:
registry:
address: http://127.0.0.1:30100 |
3.4 ´´½¨Æô¶¯Àࣺ

ÎÒÃǻᷢÏÖ£¬Õâ¸öÆô¶¯Àà±ÈÒÔǰÎÒÃǽӴ¥µÄSpringBootµÄÆô¶¯Àà¶àÁËÒ»¸ö×¢½â£º@EnableServiceComb£¬Õâ¸ö×¢½âµÄ×÷ÓþÍÊDZíÃ÷ÕâÊÇServiceCombÓ¦Óã¬ÆôÓÃjava.chassisºËÐŦÄÜ¡£ºÜÖØÒªµÄÒ»¸ö×¢½â¡£
3.5 ´´½¨ÒµÎñÀࣺ

×¢Ò⣺@RestSchemaÕâ¸ö×¢½âÊÇΪÁ˱íÃ÷¸ÃÓ¦ÓÃʹÓõÄrestÐÒ飬»¹ÓÐÒ»ÖÖÊÇRPCÐÒ飬¶ÔÓ¦µÄ×¢½âÊÇ£º@RpcSchema£¬Õâ¸öÀïÃæµÄschemaId±£Ö¤Î¨Ò»¼´¿É¡£
´Ëʱ£¬ÎÒÃÇÒѾ¿ÉÒÔÆô¶¯·þÎñÌṩÕߣ¬ÔÚä¯ÀÀÆ÷ÉϽøÐвâÊÔÁË¡£²»¹ýÎÒÃÇÒªÏÈÆô¶¯±¾µØ×¢²áÖÐÐÄ¡£
4¡¢´´½¨Ïû·ÑÕß¹¤³Ì
4.1 ÔÚ¸¸¹¤³ÌµÄ»ù´¡ÉÏ´´½¨Ïû·ÑÕßÄ£¿é£ºhello-world-consumer
4.2 pom.xmlÎļþÌí¼ÓÈçÏÂÒÀÀµ£º
<dependencies>
<!--hibernateУÑ鹿Ôò--> <dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency> <!--restÖ§³Ö-->
<dependency> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency> <!--ServiceCombÌṩµÄÖ§³Ö-->
<dependency> <groupId>org.apache.servicecomb</groupId>
<artifactId>spring-boot-starter-provider</artifactId>
</dependency> <!--springbootÓëwebÕûºÏ-->
<dependency> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>com.zdw</groupId> <artifactId>hello-world-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency> </dependencies> |
4.3 ÔÚresourcesĿ¼Ï´´½¨ÅäÖÃÎļþmicroservice.yaml£¬ÄÚÈÝÈçÏ£º
APPLICATION_ID:
helloworlddemo
service_description:
name: demo-consumer
version: 1.0.0
servicecomb:
rest:
address: 0.0.0.0:9001
service:
registry:
address: http://127.0.0.1:30100 #±¾µØ×¢²áÖÐÐĵĵØÖ· |
4.4 ´´½¨Æô¶¯Àࣺ

4.5 ´´½¨ÒµÎñ´úÂëÀࣺ
ÕâÀïÓÐÁ½ÖÖ·½Ê½£ºµÚÒ»ÖÖÊÇͨ¹ýrest·½Ê½À´µ÷Ó÷þÎñÌṩÕߵķþÎñ£¬µÚ¶þÖÖÊÇͨ¹ýrpc·½Ê½À´µ÷Ó÷þÎñÌṩÕߵķþÎñ¡£ÕâÀïҲ˵Ã÷ÁËServiceCombµÄÇ¿´óÖ®´¦£¬ÎÒÃÇÖªµÀ£¬ÔÚ·þÎñÌṩÕßÌṩ¶Ë£¬ÎÒÃÇÉùÃ÷µÄRestÐÒéµÄ£¬µ«ÊÇÎÒÃǵ÷ÓõÄʱºò£¬²¢²»½öÏÞÓÚRestÐÒ飬ͬÑù¿ÉÒÔʹÓÃrpcÐÒéÀ´µ÷Óã¬ÏÂÃæÒÀ´Î½²½â£º
4.5.1 RestÐÒéµ÷Ó÷þÎñ

²âÊÔ£ºÆô¶¯±¾µØ×¢²áÖÐÐÄ£¬Æô¶¯·þÎñÕߣ¬Æô¶¯Ïû·ÑÕߣ¬·ÃÎʵØÖ·£ºhttp://localhost:9001/request?name=aa
ÎÒÃÇ»¹¿ÉÒÔͨ¹ýǰ̨¿ØÖÆÒ³Ãæ²é¿´£ºhttp://127.0.0.1:30103

4.5.2 RpcÐÒéµ÷ÓÃ
ÎÒÃÇÖØÐ¶¨ÒåÒ»¸öеÄÒµÎñ´úÂëÀࣺRpcConsumerController

µ±ÎÒÃÇÔÙ´ÎÆô¶¯Ïû·ÑÕß¹¤³ÌµÄʱºò£¬·¢ÏÖÆô¶¯±¨´íÁË£¬Ö÷Òª´íÎóÈçÏ£º
Caused by: java.lang.IllegalStateException:
There is a schema only existing in local microservice:
[rpcConsumerController], which means there are interfaces
changed. You need to increment microservice version
before deploying, or you can configure service_description.environment =development
to work in development environment and ignore this
error
Õâ˵Ã÷ÎÒÃÇ֮ǰÒѾע²á¹ý¸Ã·þÎñµ½×¢²áÖÐÐÄ£¬ÏÖÔÚ·þÎñÓÐÁ˱䶯£¬ÐèÒªÎÒÃÇÈ¥´¦Àí¡£×î¼òµ¥µÄ·½Ê½¾ÍÊÇ£¬ÎÒÃǵ½±¾µØ×¢²áÖÐÐĵÄĿ¼Ï£¬É¾³ýdataÎļþ¼Ð£¬È»ºóÖØÐÂÆô¶¯±¾µØ×¢²áÖÐÐÄ¡£È»ºóÎÒÃÇÔÙ´ÎÆô¶¯·þÎñÌṩÕߺÍÏû·ÑÕߣ¬·¢ÏÖÆô¶¯³É¹¦¡£
´ËʱÎÒÃÇ·ÃÎʵØÖ·£ºhttp://localhost:9001/rpc/request?name=aa
Ò²¿ÉÒԵõ½ÕýÈ·µÄ½á¹û¡£
ͬʱ֮ǰµÄ·ÃÎʵØÖ·£ºhttp://localhost:9001/request?name=aa Ò²ÊÇ¿ÉÒԵġ£
ÈëÃ۸Àýµ½ÕâÀï¾Í¸æÒ»¶ÎÂäÁË£¬ÊDz»ÊǾõµÃºÜ¼òµ¥°¡£¬¹þ¹þ¡£²»¹ýÎÒ»¹Óöµ½¹ýÒ»¸ö¿Ó£¬ÕâÀïÒ²¼òµ¥ËµÃ÷һϡ£µ±ÎÒÃÇÔÚmicroservice.yamlÎļþÖÐÅäÖãºrest:
address: 0.0.0.0:9000 µÄʱºò£¬Ò»¶¨Òª±£Ö¤¶Ë¿ÚÊDz»±»Õ¼Óõģ¬Èç¹ûÊÇÕ¼Óû°£¬»á³öÏÖÒÔÏ´íÎ󣺴ËʱÎÒÅäÖõÄÊÇ8080
Caused by: org.apache.servicecomb.foundation.common .exceptions.ServiceCombException:
all transport named rest refused to init.
ËùÒÔÈç¹û³öÏÖÁËÉÏÊöµÄ´íÎó£¬ÎÒÃǾÍÒª¿´¿´ÊDz»ÊǶ˿ڱ»Õ¼ÓÃÁË¡£ |