±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚÍøÂ磬±¾ÎÄÏêϸ½éÉÜÈçºÎÅäÖÃdubbo¡¢Provider
ÅäÖÃÏê½âÒÔ¼°dubbo providerµÄÍêÕûʹÓà £¬Ï£Íû¶Ô´ó¼ÒµÄѧϰÄÜÓÐËù°ïÖú¡£ |
|
Dubbo»ù±¾Ó÷¨
±¾Õ½ÚÖ÷Òª½²ÊöÈçºÎÅäÖÃdubbo£¬°´ÕÕÅäÖ÷½Ê½ÉÏ·Ö£¬¿ÉÒÔ·ÖΪ£ºXMLÅäÖã¬properties·½Ê½ÅäÖã¬×¢½â·½Ê½ÅäÖã¬APIµ÷Ó÷½Ê½ÅäÖá£
°´ÕÕ¹¦ÄܽǶȽøÐл®·Ö£¬¿ÉÒÔ·ÖΪDubbo ProviderºÍDubbo Consumer¡£½ÓÏÂÀ´Õ½ÚÖУ¬·Ö±ð¶Ôdubbo
providerºÍDubbo consumer½øÐн²½â¡£
Dubbo ProviderÅäÖÃ
Provider ÅäÖÃÏê½â
ÅäÖÃDubbo ProviderÓÐ4ÖÖ·½Ê½£ºXMLÅäÖã¬properties·½Ê½ÅäÖã¬APIµ÷Ó÷½Ê½ÅäÖã¬×¢½â·½Ê½ÅäÖá£
XMLÅäÖÃ
×î¼òµ¥µÄÅäÖõÄÑùÀý£º
<?xml version="1.0"
encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org /schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<dubbo:application name="hello-world-app"
/> <dubbo:registry address="multicast://224.5.6.7:1234"
/> <dubbo:protocol name="dubbo"
port="20880" /> <dubbo:service
interface="com.alibaba.dubbo.demo. DemoService"
ref="demoServiceLocal" /> <dubbo:reference
id="demoServiceRemote" interface="com.alibaba.dubbo.demo.DemoService"
/>
</beans> |
ÉÏÃæÑùÀýÖУ¬×¢ÒâÏÂdubbo schemaµÄд·¨£º
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org /schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> |
Ö§³ÖµÄÅäÖñêÇ©


ÅäÖÃÖ®¼ä¹ØÏµÍ¼
ÅäÖÃÏîÏê½â
<dubbo:application name=¡±hello-world-app¡± />
ÓÃÓÚÖ¸¶¨Ó¦ÓÃÃû£¬ÕâÀïÐèÒª±£Ö¤Ó¦ÓÃÃûΨһ£¬Õâ¸öÓ¦ÓÃÃûÔÚºóÐøµÄconsole adminÖпÉÒÔÔÚÁбíÖÐÏÔʾ£¬·½±ã¹ÜÀí¡£
<dubbo:registry address=¡±multicast://224.5.6.7:1234¡±
/>
×¢²áÖÐÐÄÅäÖ㬺ͷþÎñ·¢ÏֵľßÌå»úÖÆÓйØÏµ¡£¿ÉÒÔÊÇzookeeperµØÖÊ£¬Ò²¿ÉÒÔeurekaµØÖÊ¡£ÉÏÃæÕâ¸öÊǹ㲥µØÖ·£¬ÔÚ±¾µØ·þÎñµ÷ÓõIJâÊÔ¹ý³ÌÖзdz£·½±ã¡£
<dubbo:protocol name=¡±dubbo¡± port=¡±20880¡± />
ÕâÀïÊÇ´«ÊäµÄÐÒéºÍĬÈ϶˿ڣ¬Ò»°ã²»ÐèÒª¸ü¸Ä¡£
½ÓÏÂÀ´Öص㽲½âÏÂ<dubbo:service/>µÄÅäÖá£
<dubbo:service/>Ö§³ÖµÄÖ÷ÒªÊôÐÔÁÐ±í£º
| ÊôÐÔÃû | ˵Ã÷ |
| ¡ª¡ª¨C | ¡ª¨C |
| version | °æ±¾ºÅ |
| scope | ·þÎñ¿É¼ûÐÔ, ֵΪ£ºlocal »òÕß remote£¬Ä¬ÈÏΪremote |
| actives | ×î´óµÄ¼¤»îµÄÇëÇóÊý |
| async | ·½·¨µ÷ÓÃÊÇ·ñÒì²½£¬Ä¬ÈÏΪfalse |
| cache | ·þÎñ»º´æ£¬¿Éѡֵ£ºlru/threadlocal/jcache |
| callbacks | callbackʵÀýµÄÏÞÖÆ |
| generic | ·º»¯µ÷Ó㬿ÉÒÔÈÆ¹ý |
| class | ServiceµÄʵÏÖµÄÀàÃû |
| connections | Õâ¸ö·þÎñÀïµÄÁ¬½ÓÊý |
| delay | ·¢²¼·þÎñÑӳٵĺÁÃëÊý |
| executes | ·þÎñÖ´ÐеÄÇëÇóÉÏÏÞ |
| retries | ³¬Ê±ÖØÊÔ´ÎÊý |
| timeout | µ÷Óó¬Ê±Ê±¼ä |
ÆäËûÅäÖÃÊôÐÔÇë²Î¿¼xsd£ºhttp://dubbo.apache.org/schema/dubbo/dubbo.xsd
<dubbo:method/>×÷Ϊ<dubbo:service/>µÄ×ÓÔªËØ£¬Ëü¿ÉÒÔÕë¶Ô·½·¨½øÐÐÅäÖᣱȽϳ£ÓõÄÊôÐÔÓУº

ÆäËûÊôÐÔ£¬¿ÉÒԲο¼ÉÏÃæµÄxsd¡£
ÅäÖõĸ²¸Ç¹ØÏµ

ÅäÖõĸ²¸Ç¹ØÏµÍ¼
ÕâÀïµÄ¸²¸Ç¹ØÏµ°üº¬ÁËProviderºÍConsumerÁ½¶ËµÄÅäÖã¬Èç¹û¶ÔconsumerÓÐÒÉÎÊ£¬¿ÉÒԲο¼ºóÒ»Õ½ڵÄconsumerÕ½ÚÖ®ºóÔÙÀ´Àí½â¡£
dubbo.properties·½Ê½ÅäÖÃ
Èç¹û¹«¹²ÅäÖúܼòµ¥£¬Ã»Óжà×¢²áÖÐÐÄ£¬¶àÐÒéµÈÇé¿ö£¬»òÕßÏë¶à¸ö Spring ÈÝÆ÷Ïë¹²ÏíÅäÖ㬿ÉÒÔʹÓÃ
dubbo.properties ×÷ΪȱʡÅäÖá£
Dubbo ½«×Ô¶¯¼ÓÔØ classpath ¸ùĿ¼Ï嵀 dubbo.properties£¬¿ÉÒÔͨ¹ýJVMÆô¶¯²ÎÊý
-Ddubbo.properties.file=xxx.properties ¸Ä±äȱʡÅäÖÃλÖá£
dubbo.propertiesÅäÖÃÑùÀý
# Ó¦ÓÃÃû
dubbo.application.name=dubbodemo-provider
# ×¢²áÖÐÐĵØÖ·
dubbo.registry.address=zookeeper://localhost:2181
# ¹ã²¥µÄ×¢²áÖÐÐÄÑùÀý
#dubbo.registry.address=multicast://224.5.6.7:1234
# µ÷ÓÃÐÒ鵨ַ
dubbo.protocol.name=dubbo
dubbo.protocol.port=28080 |
Ó³É乿Ôò
½« XML ÅäÖõıêÇ©Ãû£¬¼ÓÊôÐÔÃû£¬Óõã·Ö¸ô£¬¶à¸öÊôÐÔ²ð³É¶àÐÐ
±ÈÈ磺dubbo.application.name=fooµÈ¼ÛÓÚ<dubbo:application
name=¡±foo¡± />
±ÈÈ磺dubbo.registry.address=10.20.153.10:9090µÈ¼ÛÓÚ<dubbo:registry
address=¡±10.20.153.10:9090¡± />
Èç¹û XML ÓжàÐÐͬÃû±êÇ©ÅäÖ㬿ÉÓà id ºÅÇø·Ö£¬Èç¹ûûÓÐ id ºÅ½«¶ÔËùÓÐͬÃû±êÇ©ÉúЧ
±ÈÈ磺dubbo.protocol.rmi.port=1234µÈ¼ÛÓÚ<dubbo:protocol
id=¡±rmi¡± name=¡±rmi¡± port=¡±1099¡± /> 2
±ÈÈ磺dubbo.registry.china.address=10.20.153.10:9090µÈ¼ÛÓÚ<dubbo:registry
id=¡±china¡± address=¡±10.20.153.10:9090¡± />
¸²¸Ç²ßÂÔ

JVM Æô¶¯ -D ²ÎÊýÓÅÏÈ£¬ÕâÑù¿ÉÒÔʹÓû§ÔÚ²¿ÊðºÍÆô¶¯Ê±½øÐвÎÊýÖØÐ´£¬±ÈÈçÔÚÆô¶¯Ê±Ðè¸Ä±äÐÒéµÄ¶Ë¿Ú¡£
XML ´ÎÖ®£¬Èç¹ûÔÚ XML ÖÐÓÐÅäÖã¬Ôò dubbo.properties ÖеÄÏàÓ¦ÅäÖÃÏîÎÞЧ¡£
Properties ×îºó£¬Ï൱ÓÚȱʡֵ£¬Ö»ÓÐ XML ûÓÐÅäÖÃʱ£¬dubbo.properties
µÄÏàÓ¦ÅäÖÃÏî²Å»áÉúЧ£¬Í¨³£ÓÃÓÚ¹²Ïí¹«¹²ÅäÖ㬱ÈÈçÓ¦ÓÃÃû¡£
×¢Ò⣺
1.Èç¹û classpath ¸ùĿ¼Ï´æÔÚ¶à¸ö dubbo.properties£¬±ÈÈç¶à¸ö
jar °üÖÐÓÐ dubbo.properties£¬Dubbo »áÈÎÒâ¼ÓÔØ£¬²¢´òÓ¡ Error ÈÕÖ¾£¬ºóÐø¿ÉÄܸÄΪÅ×Òì³£¡£
?
2.ÐÒéµÄ id ûÅäʱ£¬È±Ê¡Ê¹ÓÃÐÒéÃû×÷Ϊ id
annotation
Service×¢½â±©Â¶·þÎñ
import com.alibaba.dubbo.config.annotation.Service;
@Service(timeout = 5000)
public class AnnotateServiceImpl implements
AnnotateService {
// ...
} |
javaconfigÐÎʽÅäÖù«¹²Ä£¿é
@Configuration
public class DubboConfiguration {
@Bean
public ApplicationConfig applicationConfig()
{
ApplicationConfig applicationConfig = new ApplicationConfig();
applicationConfig.setName("provider-test");
return applicationConfig;
}
@Bean
public RegistryConfig registryConfig() {
RegistryConfig registryConfig = new RegistryConfig();
registryConfig.setAddress("zookeeper://127.0.0.1:2181");
registryConfig.setClient("curator");
return registryConfig;
}
} |
ÕâÖÖ·½Ê½µÄÅäÖúÍÇ°ÃæÓÃxmlÅäÖõķ½Ê½ÊÇÒ»ÑùµÄЧ¹û¡£
Ö¸¶¨dubboɨÃè·¾¶
@SpringBootApplication
@DubboComponentScan(basePackages = "com.alibaba.dubbo.test.service.impl")
public class ProviderTestApp {
// ...
} |
»òÕßʹÓÃspring bean xmlÅäÖ÷½Ê½£º
<dubbo:annotation
package="com.chanshuyi.service.impl"
/> |
apiÖ±½Ó´¥·¢
import com.alibaba.dubbo.rpc.config.ApplicationConfig;
import com.alibaba.dubbo.rpc.config.RegistryConfig;
import com.alibaba.dubbo.rpc.config.ProviderConfig;
import com.alibaba.dubbo.rpc.config.ServiceConfig;
import com.xxx.XxxService;
import com.xxx.XxxServiceImpl;
// ·þÎñʵÏÖ
XxxService xxxService = new XxxServiceImpl();
// µ±Ç°Ó¦ÓÃÅäÖÃ
ApplicationConfig application = new ApplicationConfig();
application.setName("xxx");
// Á¬½Ó×¢²áÖÐÐÄÅäÖÃ
RegistryConfig registry = new RegistryConfig();
registry.setAddress("10.20.130.230:9090");
registry.setUsername("aaa");
registry.setPassword("bbb");
// ·þÎñÌṩÕßÐÒéÅäÖÃ
ProtocolConfig protocol = new ProtocolConfig();
protocol.setName("dubbo");
protocol.setPort(12345);
protocol.setThreads(200);
// ×¢Ò⣺ServiceConfigÎªÖØ¶ÔÏó£¬ÄÚ²¿·â×°ÁËÓë×¢²áÖÐÐĵÄÁ¬½Ó£¬ÒÔ¼°¿ªÆô·þÎñ¶Ë¿Ú
// ·þÎñÌṩÕß±©Â¶·þÎñÅäÖÃ
ServiceConfig<XxxService> service = new
ServiceConfig<XxxService>(); // ´ËʵÀýºÜÖØ£¬·â×°ÁËÓë×¢²áÖÐÐĵÄÁ¬½Ó£¬Çë×ÔÐлº´æ£¬·ñÔò¿ÉÄÜÔì³ÉÄÚ´æºÍÁ¬½Óй©
service.setApplication(application);
service.setRegistry(registry); // ¶à¸ö×¢²áÖÐÐÄ¿ÉÒÔÓÃsetRegistries()
service.setProtocol(protocol); // ¶à¸öÐÒé¿ÉÒÔÓÃsetProtocols()
service.setInterface(XxxService.class);
service.setRef(xxxService);
service.setVersion("1.0.0");
// ±©Â¶¼°×¢²á·þÎñ
service.export(); |
Ò»°ãÔÚspringÓ¦ÓÃÖУ¬²»ÍƼöʹÓÃÕâÖÖ·½Ê½¡£ ¾ßÌåµÄº¬ÒåÕâÀï²»×ö½âÊÍ£¬¿ÉÒÔͨ¹ýgithub²é¿´Ô´Âë¡£
Provider ½Ó¿ÚºÍʵÏÖ
ÉÏÃæÕ½ڸü¶à´ÓÅäÖýǶȳö·¢£¬½ÓÏÂÀ´Í¨¹ýÒ»¸öÍêÕûµÄÀý×Ó£¬À´½²½âÏÂdubbo providerµÄÍêÕûʹÓá£
Õâ¸öÀý×ÓÖÐÖ»ÓÐÒ»¸ö·þÎñUserReadService£¬ÓÐÒ»¸ö·½·¨ getUserById¡£ ÐèÒª½«Õâ¸ö·þÎñͨ¹ýDubbo±©Â¶¸øÔ¶³ÌµÄ·þÎñ¡£¾ßÌåµÄ²½ÖèÈçÏ£º
1.´´½¨¹¤³Ì
Èç¹û±¾À´ÒѾÓй¤³Ì£¬¿ÉÒÔºöÂÔ¡£´´½¨Ò»¸öspring boot¹¤³Ì£¬¿ÉÒÔͨ¹ý https://start.spring.io/
´´½¨¡£
2.¶¨Òå½Ó¿Ú
¶¨Òå½Ó¿Ú£ºUserReadService
public interface
UserReadService{
public User getUserById(Long userId);
} |
Õâ¸ö½Ó¿ÚÒ»°ãÀ´Ëµ»á·Åµ½¶ÀÁ¢µÄjar°üÀ×÷Ϊclient°ü¡£ ÆäËûÓ¦ÓÃÒªÏû·ÑÕâ¸ö·þÎñµÄʱºò£¬Ò»°ãÀ´ËµÐèÒªÓ¦ÓÃÒýÓÃÕâ¸öclient°ü¡£(³ýÁË·º»¯µ÷ÓÃ)
3.ʵÏÖ½Ó¿Ú
ʵÏÖUserReadService, µ±Ç°ÊµÏÖ²¿ÊðÔÚProviderµÄÓ¦ÓÃÖС£
public UserReadServiceImpl
implements UserReadService{
public User getUserById(Long userId){
return xxx;
}
} |
4.DubboÅäÖÃ
<?xml version="1.0"
encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/ schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<dubbo:application name="hello-world-app"
/> <dubbo:registry address="multicast://224.5.6.7:1234"
/> <dubbo:protocol name="dubbo"
port="20880" /> <bean id="userReadService"
class="com.package.UserReadServiceImpl"/>
<dubbo:service interface="com.package.UserReadService"
ref="userReadService" />
</beans> |
|