Dubbo实战_11_整合SpringBoot

目录

提供服务者(user) 

步骤1、配置提供者

步骤2、暴露服务

步骤3、开启基于注解的 dubbo 功能

消费者(order)

步骤1、配置消费者

步骤2、远程调用服务

消费者接入层——>调用公共接口——>消费者接口实现类

步骤3、开启基于注解的 dubbo 功能

步骤4、运行效果


提供服务者(user) 

步骤1、配置提供者

application.properties

#提供者配置
dubbo.application.name=boot-user-service-provider
#dubbo.registry.protocol=zookeeper
#dubbo.registry.address=127.0.0.1:2181
#上面两个也可写成一个
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.scan.base-package=com.atguigu.gmall

dubbo.protocol.name=dubbo
dubbo.protocol.port=20880

dubbo.monitor.protocol=registry


#application.name就是服务名,不能跟别的dubbo提供端重复
#registry.protocol 是指定注册中心协议
#registry.address 是注册中心的地址加端口号
#protocol.name 是分布式固定是dubbo,不要改。
#base-package  注解方式要扫描的包

步骤2、暴露服务

UserServiceImpl
//方式一:dubbo和spring中的Service注解
//@com.alibaba.dubbo.config.annotation.Service
//@Service
//方式二:dubbo的Service注解、spring的Component注解
@Service //暴露服务【dubbo的注解】
@Component
public class UserServiceImpl implements UserService {

   @Override
   public List<UserAddress> getUserAddressList(String userId) {

      System.out.println("UserServiceImpl......");

      // TODO Auto-generated method stub
      UserAddress address1 = new UserAddress(1, "北京市昌平区xxx",
            "1", "李老师", "010-56253825", "Y");
      UserAddress address2 = new UserAddress(2, "深圳市宝安区xxx",
            "1", "王老师", "010-56253825", "N");

      return Arrays.asList(address1,address2);
   }

}

步骤3、开启基于注解的 dubbo 功能

UserServiceProviderApplication.java

@EnableDubbo //开启基于注解的 dubbo 功能
@SpringBootApplication
public class UserServiceProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(UserServiceProviderApplication.class, args);
    }

}

消费者(order)

步骤1、配置消费者

#配置消费者
#web服务,修改默认tomact的服务端口8080为8081
#因为它会与监控中心的端口号起冲突
server.port=8081

#消费者配置:
dubbo.application.name=boot-order-service-consumer
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.monitor.protocol=registry


#dubbo.registry.protocol=zookeeper
#dubbo.scan.base-package=com.atguigu.gmall
#dubbo.protocol.name=dubbo
#dubbo.protocol.port=20880

#application.name就是服务名,不能跟别的dubbo提供端重复
#registry.protocol 是指定注册中心协议
#registry.address 是注册中心的地址加端口号
#protocol.name 是分布式固定是dubbo,不要改。
#base-package  注解方式要扫描的包

步骤2、远程调用服务

消费者接入层——>调用公共接口——>消费者接口实现类

OrderController.java【消费者接入层】

@Controller
public class OrderController {
   
   @Autowired
   OrderService orderService;

   //http://localhost:8081/initOrder?uid=1
   @ResponseBody
   @RequestMapping("/initOrder")
   public List<UserAddress> initOrder(@RequestParam("uid")String userId) {
      return orderService.initOrder(userId);
   }

}

OrderService.java【公共接口】
/**
 * 订单服务
 * @author yyh
 *
 */
public interface OrderService {
   
   /**
    * 初始化订单
    * @param userId
    */
   public List<UserAddress> initOrder(String userId);

}

OrderServiceImpl.java消费者接口实现类

@Service
public class OrderServiceImpl implements OrderService {

   //Field userService in com.atguigu.gmall.service.impl.OrderServiceImpl
   //required a bean of type 'com.atguigu.gmall.service.UserService' that could not be found.
   //@Autowired
   @Reference //不用自动注入,Dubbo提供远程调用服务的注解,它会自己去注册中心查看
   UserService userService;

   @Override
   public List<UserAddress> initOrder(String userId) {
      // TODO Auto-generated method stub

      System.out.println("用户id:"+userId);
      //1、查询用户的收货地址
      //如果把 用户模块 项目打成jar包,直接依赖进来!
      //那么这就不是分布式开发了,它是单体应用模式!
      //有可能除了订单应用,其他应用也需要用户接口,总不能每个应用都写一遍代码,
      //麻烦和冗余,官网也建议我们分包,把公共的放在一起。
      //我们可以把用户的 bean文件和service接口 提取放在里面.

      //我们引用了 UserService 接口,但是它的实现在别的工程里面,而且有可能在别的服务器上面,
      //所以调 getUserAddressList 方法,我们需要远程去调用

      if(!StringUtils.isEmpty(userId)) {
         List<UserAddress> addressList = userService.getUserAddressList(userId);
         for (UserAddress userAddress : addressList) {
            System.out.println(userAddress.getUserAddress());
         }
         return addressList;
      }
      return null;

   }

}

步骤3、开启基于注解的 dubbo 功能

@EnableDubbo//开启基于注解的 dubbo 功能
@SpringBootApplication
public class OrderServiceConsumerYyhApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderServiceConsumerYyhApplication.class, args);
    }

}

步骤4、运行效果

http://localhost:8081/initOrder?uid=1

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

被开发耽误的大厨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值