前期准备
下载并启动好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调用