一、主体结构
简单模拟了provider和cunsumer两个module的聚合项目
二、Provider(服务提供者)
1、dubbo配置中心
application.properties
server.port=8081
spring.application.name=DemoProvider
dubbo.scan.base-packages=com.zlb.springboot.service
dubbo.protocol.name=dubbo //dubbo名称(注册中心名称)
dubbo.protocol.port=666 //dubbo端口
dubbo.protocol.host=192.168.0.432 //dubbo应用主机ip
dubbo.registry.address=zookeeper://192.168.91.128:2181 //zookeeper地址及端口
2、maven依赖
pom.xml
<!-- 公用的依赖 -->
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- dubbo -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>${dubbo.version}</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-framework -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.2.0</version>
<exclusions>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.14</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
3、服务提供对象
注意:@Service不再是Spring那个,而是Dubbo包里面的
由于两个Service注解名一样,为了差异性,原Service用Component代替
package com.zlb.springboot.service.impl;
import com.zlb.springboot.service.IDemoService;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;
@Service(version = "1.0.0", timeout = 10000, interfaceClass = IDemoService.class)
@Component
public class DemoServiceImpl implements IDemoService {
@Override
public String say(String name){
System.out.println(name + " say hello!");
return name + " say hello!";
}
}
三、Consumer(服务消费者)
1、配置
application.properties
spring.application.name=DemoCustomer
dubbo.registry.address=zookeeper://192.168.91.128:2181
2、消费端
注意,此时采用@Reference注解,并添加服务方的版本号属性值。
package com.zlb.springboot.controller;
import com.zlb.springboot.service.IDemoService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/main")
public class MainController {
@Reference(version = "1.0.0")
IDemoService demoService;
@RequestMapping("say")
public String say(){
return demoService.say("Lily");
}
}
四、启动服务端
启动服务App.java,如出现如下日志信息,表示已经启动成功。
2022-04-17 18:32:23.639 INFO 16636 --- [68.91.128:2181)] org.apache.zookeeper.ClientCnxn : Opening socket connection to server 192.168.91.128/192.168.91.128:2181. Will not attempt to authenticate using SASL (unknown error)
2022-04-17 18:32:23.641 INFO 16636 --- [68.91.128:2181)] org.apache.zookeeper.ClientCnxn : Socket connection established to 192.168.91.128/192.168.91.128:2181, initiating session
2022-04-17 18:32:23.804 INFO 16636 --- [68.91.128:2181)] org.apache.zookeeper.ClientCnxn : Session establishment complete on server 192.168.91.128/192.168.91.128:2181, sessionid = 0x1000027efb60000, negotiated timeout = 40000
2022-04-17 18:32:23.827 INFO 16636 --- [ain-EventThread] o.a.c.f.state.ConnectionStateManager : State change: CONNECTED
2022-04-17 18:32:27.521 INFO 16636 --- [ main] com.zlb.springboot.App : Started App in 25.36 seconds (JVM running for 28.564)
2022-04-17 18:32:27.529 INFO 16636 --- [pool-1-thread-1] .b.c.e.AwaitingNonWebApplicationListener : [Dubbo] Current Spring Boot Application is await...
五、检查注册中心
检查zookeeper中是否已经注册成功。如下出现dubbo节点,节点下保存了接口对象信息。
[zk: localhost:2181(CONNECTED) 3] ls /
[dubbo, zookeeper]
[zk: localhost:2181(CONNECTED) 4] ls /dubbo
[com.zlb.springboot.service.IDemoService]
六、启动客户端
启动CusumerApp.java ,出现如下日志,说明客户端已经启动完成。
2022-04-17 18:55:53.028 INFO 17992 --- [68.91.128:2181)] org.apache.zookeeper.ClientCnxn : Opening socket connection to server 192.168.91.128/192.168.91.128:2181. Will not attempt to authenticate using SASL (unknown error)
2022-04-17 18:55:53.031 INFO 17992 --- [68.91.128:2181)] org.apache.zookeeper.ClientCnxn : Socket connection established to 192.168.91.128/192.168.91.128:2181, initiating session
2022-04-17 18:55:53.045 INFO 17992 --- [68.91.128:2181)] org.apache.zookeeper.ClientCnxn : Session establishment complete on server 192.168.91.128/192.168.91.128:2181, sessionid = 0x1000027efb60002, negotiated timeout = 40000
2022-04-17 18:55:53.057 INFO 17992 --- [ain-EventThread] o.a.c.f.state.ConnectionStateManager : State change: CONNECTED
2022-04-17 18:55:56.924 INFO 17992 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
2022-04-17 18:55:57.616 INFO 17992 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2022-04-17 18:55:57.622 INFO 17992 --- [ main] com.zlb.springboot.ConsumerApp : Started ConsumerApp in 27.926 seconds (JVM running for 30.673)
七、访问客户端
浏览器登录http://localhost:8080/main/say,打印出Lily say hello!
此时简单的Dubbo架构demo搭建完成。