1. Nacos注册中心启动:
这里在windows里面单机启动一下:
=>nacos\distribution\target\nacos-server-2.0.3-SNAPSHOT\nacos\bin\startup.cmd -m standalone
=>http://127.0.0.1:8848/nacos nacos/nacos
2. 生产者:
=>pom.xml
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.8</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<version>2.7.8</version>
</dependency>
=>application.properties
server.port=8080
spring.application.name=nacos-dubbo-provider
dubbo.registry.address=nacos://127.0.0.1:8848
dubbo.application.name=nacos-dubbo.provider
相较于单纯的Nacos + Springboot构建而言,使用dubbo的方式也就是名字有些差别:
Nacos + Springboot:
- spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
- spring.cloud.nacos.discovery.service=test-provider
Nacos + Dubbo + Springboot:
- dubbo.registry.address=nacos://127.0.0.1:8848
- dubbo.application.name=nacos-dubbo.provider
=>启动类
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@EnableDubbo
public class NacosDubboProviderApplication {
public static void main(String[] args) {
SpringApplication.run(NacosDubboProviderApplication.class, args);
}
}
备注:生产者这端由于需要将服务通过Dubbo注册到Nacos,因此需要添加注解【@EnableDubbo】
备注:相关于@EnableDubbo 这个注解,可以在后面添加括号来标注扫描指定包下的服务,将包内的指定 @DubboService 的服务注册到Nacos中,没有扫描的话当然就将所有指定了@DubboService 统统注册啦。有关于服务包扫描的设置也可以通过在【application.properties】配置文件中配置。
=>Service实现(接口略)
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.stereotype.Service;
@Service
@DubboService
public class TestServiceImpl implements TestService{
@Override
public String getStr(String str) {
return "Test" + str;
}
}
备注:这里需要标注将指定的服务注册到Nacos中,使用了注解【@DubboService】
版本升级:这里由于Dubbo依赖的版本升级,因此使用的注解相较于旧版本有些不同,以前是用Dubbo的@Service来将服务标记的,而由于和Spring的@Service冲突,所以那时候只能用@Component了。好在版本升级了,Dubbo的标注使用了@DubboService,Spring的@Service因此又能使用了。说到这里,由于Dubbo由Alibaba托管给Apache了,因此这里pom引入的依赖都是Apache的,Alibaba的虽然也能用,但是却标记不建议使用了。
=>简单测试一下:
=>http://127.0.0.1:8848/nacos nacos/nacos
3. 消费者:
=>pom.xml
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.8</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<version>2.7.8</version>
</dependency>
和生产者相同
=>application.properties
server.port=8081
spring.application.name=nacos-dubbo-consumer
dubbo.registry.address=nacos://127.0.0.1:8848
dubbo.application.name=nacos-dubbo.consumer
和生产者相同
=>启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class NacosDubboConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(NacosDubboConsumerApplication.class, args);
}
}
没有服务注册到Nacos,因此省略了 @EnableDubbo
=>Controller(Service间接接口略)
import com.wanghai.service.TestService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
@DubboReference
private TestService testService;
@RequestMapping("/getStr/{str}")
public String getStr(@PathVariable String str){
return testService.getStr(str);
}
}
备注:消费者通过注解【@DubboReference】来表明服务是在Nacos之中获取的。
版本升级:以前使用的是@Reference,会和既存的@Reference发生冲突,现在变成了@DubboReference了。
=>简单测试一下:
=>http://127.0.0.1:8848/nacos nacos/nacos
=>http://localhost:8081/getStr/test-nacos
顺利获取Nacos上的服务!