Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÔÚDockerÖÐÔËÐÐDubboÓ¦ÓÃ
 
 
  2853  次浏览      30
 2021-1-27 
 
±à¼­ÍƼö:
±¾ÎÄͨ¹ýSpring Boot¹¹½¨ÁËÒ»¸ö×îСµÄDubboÓ¦Óã¬ÈÝÆ÷»¯ºó³É¹¦²¿Êðµ½°¢ÀïÔÆÈÝÆ÷·þÎñÉÏ¡£

±¾ÎÄÀ´×ÔÓÚ°¢ÀïÔÆ£¬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼­¡¢ÍƼö¡£

Dubbo¸ÅÊö

DubboÊǰ¢À↑ԴµÄÒ»¸ö·Ö²¼Ê½·þÎñ¿ò¼Ü£¬ÔÚ¹úÄÚ·ÛË¿ºÜ¶à¡£¹ÙÍøÉϵĽéÉÜÊÇ£º

DUBBOÊÇÒ»¸ö·Ö²¼Ê½·þÎñ¿ò¼Ü£¬ÖÂÁ¦ÓÚÌṩ¸ßÐÔÄܺÍ͸Ã÷»¯µÄRPCÔ¶³Ì·þÎñµ÷Ó÷½°¸£¬Êǰ¢Àï°Í°ÍSOA·þÎñ»¯ÖÎÀí·½°¸µÄºËÐÄ¿ò¼Ü£¬Ã¿ÌìΪ2,000+¸ö·þÎñÌṩ3,000,000,000+´Î·ÃÎÊÁ¿Ö§³Ö£¬²¢±»¹ã·ºÓ¦ÓÃÓÚ°¢Àï°Í°Í¼¯Íŵĸ÷³ÉÔ±Õ¾µã¡£

DubboµÄÎĵµºÜÍêÕû£¬ÍøÂçÉÏ×ÊÔ´Ò²ºÜ¶à£¬ÕâÀï¾Í²»ÔÙÖØ¸´ÁË¡£±¾ÎÄ×öÕâÑùÒ»¸ö³¢ÊÔ£¬½«Ò»¸öDubboÓ¦ÓÃÈÝÆ÷»¯£¬²¿Êðµ½°¢ÀïÔÆµÄÈÝÆ÷·þÎñÉÏ¡£

¼«¼òDubboÓ¦Óýṹ

ÔÚDubboÊÀ½çÀ·þÎñµ÷Ó÷½ºÍ·þÎñÌṩ·½Í¨¹ýDubboµÄ·¢ÏÖ»úÖÆ»¥Ïà·¢ÏÖ¡£Ò»¸ö×îСµÄDubboÓ¦Óðüº¬ÈçÏÂÈý¸ö·þÎñ£º

·þÎñÌṩÕß

·þÎñµ÷Ó÷½

·¢ÏÖ»úÖÆ£¨ÀýÈçzookeeper£©

zookeeperÒѾ­ÓÐDocker¾µÏñÁË£¬ÏÂÃæÎÒÃǾͻáÓÃSpring Boot¿ª·¢·þÎñÌṩ·½Service ProducerºÍ·þÎñµ÷Ó÷½Service Consumer¡£

¶¨Òå·þÎñ½Ó¿Ú

´´½¨Ò»¸öMavenÄ£¿éservice-api£¬¶¨Òå·þÎñ½Ó¿Ú¡£

public interface Greetings {
String say(String name);
}

Õâ¸ö½Ó¿ÚºÜ¼òµ¥£¬¾ÍÊÇÎʺá£

ÔÚpom.xmlÖÐÒýÈë¶ÔDubboµÄÒÀÀµ£º

<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
</dependency>
</dependencies>

ÎÒÃÇÓõÄÊÇdubbo 2.5.3°æ±¾£¬¶ÁÕßÈç¹ûÔ¸Òâ³¢ÊÔ¸üеİ汾£¬¿ÉÒÔ×ÔÐÐÉý¼¶¡£

·þÎñÌṩ·½ Service Producer

´´½¨Ò»¸öMavenÄ£¿éservice-producer£¬Ìṩ·þÎñ½Ó¿ÚµÄʵÏÖ¡£

public class GreetingsImpl implements Greetings {
public String say(String name) {
return "Greetings from " + name;
}
}

ΪÁËÄÜÕÒµ½·þÎñ½Ó¿ÚÄ£¿é£¬ÐèÒªÔÚpom.xmlÖж¨Òå¶Ôservice-apiµÄÒÀÀµ¡£

<dependencies>
...
<dependency>
<groupId>com.example</groupId>
<artifactId>dubbo-service-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>

Dubboͨ¹ýspring xmlÅäÖÃÎļþµÄ·½Ê½ÉùÃ÷¶ÔzookeeperµÄ·ÃÎÊ¡£ÔÚresourcesĿ¼Ï´´½¨services.xml£¬ÆäÖÐ×îÖØÒªµÄÄÚÈÝÊÇÖ¸¶¨zookeeperµÄµØÖ·ºÍ¶Ë¿Ú£¬ÎªÁ˲»°ÑzookeeperµÄµØÖ·Ð´ËÀÔÚÅäÖÃÎļþÖУ¬ÎÒÃDzÉÓû·¾³±äÁ¿À´Ö¸Ã÷·þÎñµØÖ·¡£ÕâÒ²ÊÇ12 factorÓ¦ÓõÄÒ»¸öÍÆ¼öʵ¼ùÖ®Ò»¡£

<dubbo:registry protocol=" zookeeper" address="${ZOOKEEPER_SERVER}:2181" />

<dubbo: protocol name= " dubbo" port="20880" />

<dubbo:service interface= "com.example.service.Greetings" ref= "greetingService"/>

<bean id= "greetingService" class= "com.example.service.producer.GreetingsImpl" />

xmlÎļþÖÐµÄÆäËûÄÚÈݰüÀ¨Ö¸¶¨±¾·þÎñµÄÕìÌý¶Ë¿ÚΪ20880£¬GreetingsImplÀàʵÏֵĽӿÚAPIÀàµÈ¡£

ÏÂÃæÒªÔÚpom.xmlÒýÈëdubboµÄÏîÄ¿ÒÀÀµ¡£

<dependencies>
...
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
<exclusions>
<exclusion>
<artifactId>spring</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>

ÎÒÃÇ×¼±¸ÓÃspring 4.x£¬ËùÒÔ°ÑdubboÖÐ×Ô´øµÄÀϰ汾springframeworkÌÞ³ý¡£

ÏÖÔÚ·þÎñµÄʵÏÖÀàÓÐÁË£¬ÎÒÃÇÐèÒªÒ»¸öÖ÷º¯Êý°ÑʵÏÖÀàÔËÐÐÆðÀ´¡£SpringbootÓÐÒ»¸öºÜºÃµÄÌØÐÔ£¬¾ÍÊǰÑÒ»¸öJavaÓ¦ÓõÄËùÓÐÏà¹ØÒÀÀµ´ò°ü³ÉΪһ¸ö³¬¼¶JAR°ü£¬¶ÔÓÚÉú³ÉDocker¾µÏñÀ´Ëµ·Ç³£·½±ã¡£

Ê×ÏÈÔÚpom.xmlÖÐÒýÈëspringbootÒÀÀµ¡£

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

´´½¨Ò»¸öSpringÖ÷Ó¦Óá£ÓÉÓÚDubbo²ÉÓÃxmlÅäÖÃÎļþµÄ·½Ê½£¬ÒªÍ¨¹ý@ImportResourceÉùÃ÷¼ÓÔØservices.xmlÅäÖÃÎļþ¡£

@SpringBootApplication
@ImportResource({"classpath:services.xml"})
public class Application {
public static void main(String[] args) throws Exception{
SpringApplication.run(Application.class, args);
}
}

Springboot WebÓ¦ÓÃÆô¶¯ºó»á×Ô¶¯ÕìÌý8080¶Ë¿Ú¡£²»¹ýÎÒÃÇÔÚÕâÀïûÓÐÓõ½ÄÚÖõÄtomcatºÍ8080¶Ë¿Ú¡£Èç¹ûÄ㲻ϲ»¶Õâ¸ö¶àÓàµÄtomcat£¬¿ÉÒÔÓÃspring-boot-starterÌæ»»±¾ÎÄÖеÄspring-boot-starter-webÏîÄ¿£¬µ«Òª×¢ÒâµÄÊÇ£¬Ã»ÓÐtomcatµÄ´úÂëÐèÒªÔö¼Ó²»Í˳öÓ¦ÓõÄÂß¼­¡£

·þÎñµ÷Ó÷½ Service Consumer

Service ConsumerµÄ½á¹¹ºÍProducerµÄ½á¹¹ÀàËÆ£¬Ò²ÐèÒªÔÚpom.xmlÖÐÒýÈë¶Ôdubbo, service-apiºÍspringbootµÄÒÀÀµ¡£ÔÚresoucesĿ¼Ï´´½¨services.xml£¬ÉùÃ÷zookeeperµÄµØÖ·ºÍÒª·ÃÎʵķþÎñ½Ó¿Ú£º

<dubbo:registry protocol="zookeeper" address="${ZOOKEEPER_SERVER}:2181" />
<dubbo:reference id="greetingService" interface= "com.example.service.Greetings" />

Ô¶³Ìµ÷ÓõķþÎñbeanÃû×ÖΪgreetingService£¬ÔÚÏÂÃæµÄ´úÂëÖÐÒªÓõ½¡£

ÔÚApplicationÖ÷Ó¦ÓÃÖе÷ÓÃService Producer¡£

Greetings greetingService = (Greetings)context.getBean("greetingService");
String result = greetingService.say("Dubbo Docker");

ΪÁËÄܹ»ÓÃHTTP·ÃÎÊConsumerÓ¦Óã¬ÎÒÃÇÓÃ@RequestMapping½«context root £¯Ó³Éäµ½·½·¨ÉÏ¡£

@RequestMapping("/")
public String greetings(){
...

ConsumerÆô¶¯ÕìÌýµÄ¶Ë¿ÚÔÚresources/application.propertiesÎļþÖÐÖ¸¶¨£º

server.port=${SERVER_PORT:0}

±àÒë²¢ÔÚ±¾µØÔËÐÐ

ÔÚÏîÄ¿µÄ¸ùĿ¼ÏÂÔËÐÐMaven±àÒ룺

mvn package

´ÓDocker¾µÏñÖÐÆô¶¯zookeeper£¬²¢°Ñ2181¶Ë¿ÚÓ³Éäµ½±¾»ú£º

docker run -d -p 2181:2181 -p 2888:2888 -p 3888:3888 registry.aliyuncs.com/acs -sample/zookeeper:3.4.8

ÔÚ»·¾³±äÁ¿ÖÐÖ¸¶¨zookeeperµØÖ·£¬Æô¶¯Service Producer¡£

export ZOOKEEPER_SERVER=127.0.0.1
java -jar target/dubbo- service-producer-1.0-SNAPSHOT.jar

Æô¶¯Service Consumerʱ³ýÁËÒªÖ¸¶¨zookeeperµØÖ·Í⣬»¹ÒªÖ¸¶¨consumer×Ô¼ºÕìÌýµÄµØÖ·£¬±¾Ê¾ÀýÖÐʹÓõÄÊÇ8899¡£

export ZOOKEEPER_SERVER=127.0.0.1
export SERVER_PORT=8899
java -jar target/dubbo-service-consumer-1.0-SNAPSHOT.jar

·ÃÎÊÒ»ÏÂcosumerµÄHTTP 8899¶Ë¿Ú£¬¿ÉÒÔ¿´µ½ÏûÏ¢µÄÊä³ö¡£ËµÃ÷·þÎñµ÷Ó÷½´ÓzookeeperÖлñµÃÁËÕýÈ·µÄproducerµÄµØÖ·£¬²¢ÓÃdubboÔ¶³Ìµ÷ÓÃЭÒé³É¹¦µ÷ÓÃÁËproducerµÄGreetingService¡£

$curl http://localhost:8899/
Greetings from Dubbo Docker

¹¹½¨Docker¾µÏñ

ΪProducerºÍConsumer¹¹½¨Docker¾µÏñºÍÕý³£µÄSpringBootÓ¦ÓÃÒ»Ñù£¬DockerfileÄÚÈÝÈçÏ£º

FROM openjdk:8-jre
VOLUME /tmp
COPY target/*.jar app.jar
RUN sh -c 'touch /app.jar'
CMD ["java", "-Djava.security.egd =file:/dev/./urandom", "-jar","/app.jar"]

°ÑÕâ¸öÎļþ·Ö±ð·ÅÔÚProducerºÍConsumerµÄĿ¼Ï£¬Ö´ÐÐDockerµÄ±àÒëÃüÁî¼´¿É´ò°üÉú³ÉÈÝÆ÷¾µÏñ¡£

ÔÚservice-producerĿ¼ÏÂÔËÐУº

mvn package
docker build -t producer .

Éú³Éservice-consumer¾µÏñÀàËÆ£¬ÕâÀï¾Í²»Öظ´ÁË¡£

Á½¸ö¾µÏñÉú³Éºó£¬¿ÉÒÔÓÃDocker ComposeÃüÁîÆô¶¯¡£¶ÔÓ¦µÄdocker-compose.ymlÄÚÈÝÈçÏ£º

version: "2"
services:
zookeeper:
image: 'registry.aliyuncs.com/acs -sample/zookeeper:3.4.8'
hostname: zookeeper
producer:
image: 'producer:latest'
environment:
- ZOOKEEPER_SERVER=zookeeper
consumer:
image: 'consumer:latest'
environment:
- ZOOKEEPER_SERVER=zookeeper
- SERVER_PORT=8899
ports:
- 8899:8899

ÔÚÕâÀï°ÑzookeeperÈÝÆ÷µÄÖ÷»úÃûhostnameÉèÖÃΪzookeeper²¢Í¨¹ý»·¾³±äÁ¿´«¸øproducerºÍconsumer¡£ÔËÐÐDocker ComposeÆô¶¯Èý¸öÈÝÆ÷¡£

$docker-compose up -d
Creating docker_consumer_1
Creating docker_zookeeper_1
Creating docker_producer_1

ÈÝÆ÷Æô¶¯³É¹¦ºóÓÃͬÑù·½Ê½·ÃÎÊ8899¶Ë¿Ú¿ÉÒÔ¿´µ½ÕýÈ·µÄÊä³ö¡£

$curl http://localhost:8899/
Greetings from Dubbo Docker

²¿Êðµ½°¢ÀïÔÆÈÝÆ÷ÉÏ

ºÃÁË£¬ÖÁ´ËÎÒÃÇÒѾ­³É¹¦µØÔÚ±¾µØDocker»·¾³ÖÐÔËÐÐÁËDubboÓ¦Óã¬ÏÂÃæ¾ÍÒª½«Õâ¸öÓ¦Óò¿Êðµ½°¢ÀïÔÆÈÝÆ÷·þÎñÉÏ¡£

Ê×Ïȵǽ°¢ÀïÔÆDocker¾µÏñ²Ö¿â£¬µØÖ·ÔÚ´Ëhttps://cr.console.aliyun.com/£¬´´½¨2¸ö¾µÏñ²Ö¿â¡£ÔÚ±¾Ê¾ÀýÖÐÃüÃûΪdubbo-springboot-producerºÍdubbo-springboot-consumer¡£

´´½¨Ò»¸öΪ°¢ÀïÔÆ²¿ÊðµÄÄ£°æÎļþ£¬docker-compose-acs.yml£¬ÄÚÈݺÍdocker-compose.ymlÀàËÆ¡£

version: "2"
services:
zookeeper:
image: 'registry.aliyuncs.com/acs -sample/zookeeper:3.4.8'
hostname: zookeeper
producer:
image: 'registry.cn -hangzhou.aliyuncs.com/${rname}/dubbo -springboot-producer:latest'
environment:
- ZOOKEEPER_SERVER=zookeeper
consumer:
image: 'registry.cn-hangzhou.aliyuncs.com/${ rname }/dubbo -springboot-consumer:latest'
environment:
- ZOOKEEPER_SERVER=zookeeper
- SERVER_PORT=8899
labels:
aliyun.routing.port_8899 : http://ds-consumer

Õâ¸ö²¿ÊðÎļþºÍdocker-compose.ymlÄÚÈݲ»Í¬Ö®´¦ÔÚÓÚ£¬ËùÓÐÈÝÆ÷µ½Ö÷»ú¶Ë¿ÚÓ³É䶼ȥµôÁË£¬ÎªÁËÄÜ·ÃÎÊconsumer£¬Ê¹ÓÃÁËaliyun.routing.port_8899ΪconsumerÖ¸¶¨Ò»¸ö×ÓÓòÃû¡£¼¯Èº²¿Êðºó¿ÉÓÃÈçÏÂURL·ÃÎÊconsumer·þÎñ¡£

http://ds-consumer.c67***8cd5.cn-shenzhen.alicontainer.com

µÇ½°¢ÀïÔÆÈÝÆ÷·þÎñ¿ØÖÆÌ¨ https://cs.console.aliyun.com£¬ÀûÓò¿ÊðÄ£°æ´´½¨Ò»¸öÐÂÓ¦Ó㬲¿ÊðÄ£°æµÄÄÚÈݾÍÊÇÉÏÃædocker-compose-acs.ymlÄÚÈÝ£¬ÌáʾrnameʱÊäÈëÄãµÄÈÝÆ÷²Ö¿âÓû§Ãû£¬ºÜ¿ìÓ¦Óò¿Êð¾Í»á³É¹¦¡£

ÔÚ¿ØÖÆÌ¨ÖнøÈëconsumer·þÎñÒ³Ãæ£¬ÕÒµ½·ÃÎʶ˵㣺

µã»÷µØÖ·£¬¿ÉÒÔÔÚä¯ÀÀÆ÷Öп´µ½Êä³ö£º

ÖÁ´Ë£¬ÎÒÃdzɹ¦µØÔÚÔÆÉÏÔËÐÐÁËDubboÓ¦Óá£

±¾ÎÄÖеÄcomposeÄ£°æ²¿ÊðΪv2°æ±¾£¬Èç¹û´ó¼ÒÏë³¢ÊÔÀûÓÃv3°æ±¾²¿Ê𣬿ÉÒÔ·ÃÎÊgithub

ÌÖÂÛ

ÔÚÍøÉÏÓÐÌÖÂÛÈÝÆ÷»¯µÄDubboÓ¦Ó÷¢Ë͵ÄIPµØÖ·²»¶Ô£¬¾­Êµ²âÔÚDocker 1.12°æ±¾ÏÂûÓÐÕâ¸öÎÊÌ⣬²¿Êðµ½°¢ÀïÔÆÈÝÆ÷·þÎñÉÏÒ²Õý³£¡£±¾ÎĵÄʾÀý´úÂëÔÚgithubÉÏ£¬´ó¼Ò¿ÉÒԲο¼¡£

 

 
   
2853 ´Îä¯ÀÀ       30
Ïà¹ØÎÄÕÂ

Java΢·þÎñÐÂÉú´úÖ®Nacos
ÉîÈëÀí½âJavaÖеÄÈÝÆ÷
JavaÈÝÆ÷Ïê½â
Java´úÂëÖÊÁ¿¼ì²é¹¤¾ß¼°Ê¹Óð¸Àý
Ïà¹ØÎĵµ

JavaÐÔÄÜÓÅ»¯
Spring¿ò¼Ü
SSM¿ò¼Ü¼òµ¥¼òÉÜ
´ÓÁ㿪ʼѧjava±à³Ì¾­µä
Ïà¹Ø¿Î³Ì

¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
Java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JAVAÐéÄâ»úÔ­ÀíÆÊÎö
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]
 
×îÐÂÎÄÕÂ
JavaÐéÄâ»ú¼Ü¹¹
JVM¡ª¡ªJavaÐéÄâ»ú¼Ü¹¹
JavaÈÝÆ÷Ïê½â
Java½ø½×--ÉîÈëÀí½âArrayListʵÏÖÔ­Àí
Java²¢·¢ÈÝÆ÷£¬µ×²ãÔ­ÀíÉîÈë·ÖÎö
×îпγÌ
java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
SpringBoot&Cloud¡¢JavaSSM¿ò¼Ü
Spring Boot Åàѵ
³É¹¦°¸Àý
¹úÄÚÖªÃûÒøÐÐ Spring+SpringBoot+Cloud+MVC
±±¾© Java±à³Ì»ù´¡ÓëÍøÒ³¿ª·¢»ù´¡
±±¾© Struts+Spring
»ªÏÄ»ù½ð ActiveMQ Ô­Àí
ijÃñº½¹« Java»ù´¡±à³Ìµ½Ó¦Óÿª·¢