本文共 4354 字,大约阅读时间需要 14 分钟。
为了实现Spring Cloud与Dubbo的无缝集成,我们需要先在提供方进行相应的配置。以下是具体的实现步骤:
在项目根目录的pom.xml
中添加以下依赖:
com.alibaba.cloud spring-cloud-starter-dubbo com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery
在application.yml
中添加以下配置:
dubbo: scan: base-packages: com.tuling.mall.user.service protocol: name: dubbo port: -1 registry: address: spring-cloud://127.0.0.1:8848spring: application: name: spring-cloud-dubbo-provider-user main: allow-bean-definition-overriding: true cloud: nacos: discovery: server-addr: 127.0.0.1:8848
在服务实现类上使用@DubboService
注解,确保服务能够被正确暴露:
import org.springframework.stereotype.Component;import com.alibaba.dubbo.service.DubboService;@Component@DubboServicepublic class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public Listlist() { return userMapper.list(); } @Override public User getById(Integer id) { return userMapper.getById(id); }}
在消费方项目中添加以下依赖:
org.springframework.boot spring-boot-starter-web com.alibaba.cloud spring-cloud-starter-dubbo com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery org.springframework.cloud spring-cloud-starter-openfeign
在application.yml
中添加以下配置:
dubbo: cloud: subscribed-services: spring-cloud-dubbo-provider-user protocol: name: dubbo port: -1 registry: address: spring-cloud://127.0.0.1:8848spring: application: name: spring-cloud-dubbo-consumer-user main: allow-bean-definition-overriding: true cloud: nacos: discovery: server-addr: 127.0.0.1:8848
在消费方中使用@DubboReference
注解引入服务:
@RestController@RequestMapping("/user")public class UserController { @DubboReference private UserService userService; @Autowired private RestTemplate restTemplate; @Bean @LoadBalanced @DubboTransported public RestTemplate restTemplate() { return new RestTemplate(); } @RequestMapping("/list") public Listlist() { return userService.list(); }}
在服务提供方添加以下注解:
@RestController@RequestMapping("/user")public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override @RequestMapping("/list") public Listlist() { return userMapper.list(); } @Override @RequestMapping("/getById/{id}") public User getById(@PathVariable("id") Integer id) { return userMapper.getById(id); }}
在消费方中使用@DubboTransported
注解:
@FeignClient(value = "spring-cloud-dubbo-provider-user-feign", path = "/user")@DubboTransported(protocol = "dubbo")public interface UserDubboFeignService { @RequestMapping("/list") public Listlist(); @RequestMapping("/getById/{id}") public User getById(@PathVariable("id") Integer id);}@FeignClient(value = "spring-cloud-dubbo-provider-user-feign", path = "/user")public interface UserFeignService { @RequestMapping("/list") public List list(); @RequestMapping("/getById/{id}") public User getById(@PathVariable("id") Integer id);}
在控制器中使用@DubboReference
注解:
@RestController@RequestMapping("/user")public class UserController { @DubboReference private UserService userService; @Autowired @DubboTransported private UserFeignService userFeignService; @Autowired private UserDubboFeignService userDubboFeignService; @Autowired private RestTemplate restTemplate; @Bean @LoadBalanced @DubboTransported public RestTemplate restTemplate() { return new RestTemplate(); } @RequestMapping("/list") public Listlist() { return userFeignService.list(); } @RequestMapping("/list2") public List list2() { return userDubboFeignService.list(); } @RequestMapping("/list3") public List list3() { return restTemplate.getForObject("http://spring-cloud-dubbo-provider-user-feign/user/list", List.class); }}
转载地址:http://nreg.baihongyu.com/