SpringCloud整合dubbo进行服务之间的通信
一、编写公共dubbo-api
然后把dubbo.api打成jar包并安装(install)在本地仓库中,供其他模块依赖。
二、导入相关依赖(服务提供模块和服务消费模块)
pom.xml
<dependencies>
<dependency>
<groupId>com.springcloud.dubbo</groupId>
<artifactId>dubbo-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- ===服务注册相关依赖=== -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
</dependencies>
三、配置application.yml文件
application.yml服务提供方
server:
port: 8989
spring:
cloud:
nacos:
discovery:
server-addr: 47.100.57.52:8848
# profiles:
# active: dubbo
application:
name: dubbo-provider
main:
# Spring Boot 2.1
allow-bean-definition-overriding: true
dubbo:
scan:
base-packages: com.springcloud.dubbo.dubboserverprovider.service
# http RMI Redis H dubbo
protocol:
name: dubbo
port: -1 # 20881 从20880开始找,如果端口被占用,就自增1
# zookeeper redis nacos Eureka
registry:
# 配置注册中心
address: nacos://47.100.57.52:8848
application.yml服务消费方
server:
port: 8990
dubbo:
protocol:
name: dubbo
port: -1
registry:
address: nacos://47.100.57.52:8848
cloud:
# 表示要订阅服务的服务名,可以配置'*',
# 代表订阅所有服务,不推荐使用。若需订阅多应用,使用 "," 分割
subscribed-services: dubbo-provider
spring:
application:
name: dubbo-consumer
cloud:
nacos:
discovery:
server-addr: 47.100.57.52:8848
main:
allow-bean-definition-overriding: true
服务提供方ServiceImpl
import dto.ProviderDTO;
import org.apache.dubbo.config.annotation.Service;
import service.ProviderService;
/**
* 注意: 这里@Service注解不是spring包下的而是apache.dubbo包下的
*/
@Service
public class ProviderServiceImpl implements ProviderService {
@Override
public ProviderDTO getProviderData() {
ProviderDTO dto = new ProviderDTO();
dto.setPid(1);
dto.setPName("zsm");
return dto;
}
}
服务消费方ServiceImpl
import com.springclouddubbo.dubboserverconsumer.service.ConsumerService;
import dto.ProviderDTO;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;
import service.ProviderService;
@Service
public class ConsumerServiceImpl implements ConsumerService {
@Reference
ProviderService providerService;
public ProviderDTO getProviderData() {
ProviderDTO dto = providerService.getProviderData();
return dto;
}
}
服务消费方Controller
import com.springclouddubbo.dubboserverconsumer.service.ConsumerService;
import dto.ProviderDTO;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
public class ConsumerController {
@Resource
ConsumerService consumerService;
/**
* 对前端暴露接口
*/
@RequestMapping("/getProviderData")
public ProviderDTO getProviderData(){
ProviderDTO providerData = consumerService.getProviderData();
return providerData;
}
}
所有的关于dubbo通信的一个helloworld就搭建好了,最后通过请求消费方的Controller就能拿到提供方的数据了~