前期準備
下載並啓動好nacos,nacos下載地址
創建兩個springboot項目,分別作爲provider和consumer
provider
1.maven配置
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>0.9.0.RELEASE</version>
</dependency>
<!-- Apache Dubbo -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-bom</artifactId>
<version>${dubbo.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Dubbo Spring Boot Starter -->
<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>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Dubbo Registry Nacos -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<version>${dubbo.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-spring-context</artifactId>
<version>RELEASE</version>
</dependency>
2.刪除application文件,新建bootstrap.yml
bootstrap.yml內容爲:
server:
port: 8880
spring:
application:
name: dubbo-service
main:
allow-bean-definition-overriding: true
cloud:
nacos:
#如果需要nacos作爲註冊中心,添加如下的配置,並在nacos裏創建server1的yaml配置
config:
server-addr: ${nacos.service-address}:${nacos.port}
file-extension: yaml
prefix: server1
discovery:
enabled: true
register-enabled: true
server-addr: ${nacos.service-address}:${nacos.port}
nacos:
service-address: 127.0.0.1
port: 8848
dubbo:
scan:
base-packages: com.per.service.impl
protocols:
dubbo:
name: dubbo
port: 20890
consumer:
check: false
registry:
address: nacos://${nacos.service-address}:${nacos.port}
provider:
timeout: 5000
3.Application上添加@EnableDiscoveryClient註解
@SpringBootApplication
@EnableDiscoveryClient
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
4.創建service文件夾,裏面定義接口類以及實現類
接口類
public interface IHelloService {
String hello();
}
實現類,添加dubbo的service註解
import com.benyun.service.IHelloService;
import org.apache.dubbo.config.annotation.Service;
@Service(protocol = "dubbo")
public class HelloServiceImpl implements IHelloService {
@Override
public String hello() {
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "hello";
}
}
consumer
maven引入的包與provider相同,並且同樣把application刪除,添加bootstrap.yml
server:
port: 8881
spring:
application:
name: dubbo-client
main:
allow-bean-definition-overriding: true
cloud:
nacos:
#如果需要引入nacos配置中心的配置,添加config註解的內容
config:
server-addr: ${nacos.service-address}:${nacos.port}
file-extension: yaml
prefix: server1
discovery:
enabled: true
register-enabled: true
server-addr: ${nacos.service-address}:${nacos.port}
nacos:
service-address: 127.0.0.1
port: 8848
dubbo:
registry:
address: nacos://${nacos.service-address}:${nacos.port}
consumer:
timeout: 5000
consumer在同樣的包下創建同樣的接口(通常來說應該把provider的接口進行打包,然後consumer引入該jar包,由於此處是demo,一切從簡)
public interface IHelloService {
String hello();
}
consumer的controller,引入dubbo的註解@Reference
@RestController
@RequestMapping("/test")
public class HelloController {
@Reference
private IHelloService helloService;
@GetMapping("/hello")
public String hello() {
return helloService.hello();
}
}
application添加@EnableDiscoveryClient註解
@SpringBootApplication
@EnableDiscoveryClient
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
啓動demo
首先啓動nacos,然後啓動provider,查看nacos,看到服務註冊到nacos
啓動consumer,查看nacos,看到consumer註冊到nacos
之後調用接口,完成rpc調用