Dubbo实战

Dubbo实战,第1张

Dubbo实战

目录

提供服务者(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 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 initOrder(@RequestParam("uid")String userId) {
      return orderService.initOrder(userId);
   }

}

OrderService.java【公共接口】
public interface OrderService {
   
   
   public List 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 initOrder(String userId) {
      // TODO Auto-generated method stub

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

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

      if(!StringUtils.isEmpty(userId)) {
         List 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

 

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zaji/5705248.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-17
下一篇2022-12-17

发表评论

登录后才能评论

评论列表(0条)

    保存