zoukankan      html  css  js  c++  java
  • dubbo学习(四)配置dubbo 注解方式配置

    provider(生产者)

    service注解暴露服务

    /**
     * 用户管理实现类
     */
    @Service //用的dubbo的注解,表明这是一个分布式服务
    @Component //注册为spring bean
    public class UserServiceImpl implements UserService {
    
        @Autowired
        private UserMapper userMapper;
    
        @Override
        public List<UserVO> listUser() {
            List<UserVO> result = new ArrayList<>();
            List<User> list = userMapper.listUser();
            for (User user : list) {
                UserVO vo = new UserVO();
                BeanUtils.copyProperties(user, vo);
                result.add(vo);
            }
            return result;
        }
    }

    PS:@Service注解很容易用错,目前有两个包有@Service注解:

    com.alibaba.dubbo.config.annotation.Service:用于标注对外暴露的dubbo接口实现类。

    org.springframework.stereotype.Service:用于标注根据业务块分离的Service的实现类,对应的是业务层(如一个dubbo方法可能调用多个业务块的service,这些service的实现类就用Spring的注解)。

    PS:若使用的是dubbo的Service注解时,在controller注入的时候,要选择@Reference注解来进行注入。

    dubbo配置

      在SpringBoot的配置文件application.yml中配置dubbo信息

    dubbo:
      application:
        name: user-service
      registry:
        address: zookeeper://127.0.0.1:2181
      protocol:
        port: 20880
        name: dubbo

    启动类配置

    @SpringBootApplication
    @EnableDubbo
    @MapperScan(basePackages = "zhbf.user.mapper")//配置mapper扫描的路径(Mybatis的mapper接口)
    public class UserBootStarter {
    
        public static void main(String[] args) {
            SpringApplication.run(UserBootStarter.class, args);
            System.out.println("==========USER模块启动完成!==========");
        }
    
    }

      @Configuration:启动类注解。@SpringBootApplication = (默认属性)@Configuration + @EnableAutoConfiguration + @ComponentScan。

      @EnableDubbo:开启注解Dubbo功能 ,其中可以加入scanBasePackages属性配置包扫描的路径,用于扫描并注册bean

      @MapperScan:指定mybatis的mapper接口存放路径,用于扫描mapper接口并注册

    consumer(消费者)

    Reference注解引用服务

    /**
     * 用户管理Controller
     */
    @RestController
    @RequestMapping(value = "/userManage")
    public class UserManageController {
    
        @Reference
        private UserService userService;
    
        /**
         * 查询用户集合
         * @return
         */
        @RequestMapping("queryListUser")
        public String queryListUser() {
            List<UserVO> list = userService.listUser();
            return list.toString();
        }
    }

      @Component:(把普通pojo实例化到spring容器中,相当于配置文件中的 <bean id="" class=""/>) 泛指各种组件,当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。

    例:<context:component-scan base-package=”com.*”> 
    上面的这个例子是引入Component组件的例子,其中base-package表示为需要扫描的所有子包。 

      @Reference:与@Autowired、@Resource注解功能类似,用于依赖注入,一般注入的是分布式的远程服务的对象,需要dubbo配置使用

    dubbo配置

      在SpringBoot的配置文件application.yml中配置dubbo信息(这里以application.properties举例)

    # dubbo配置
    dubbo.application.name=web-service
    dubbo.registry.address=zookeeper://127.0.0.1:2181 

    启动类配置

    @SpringBootApplication
    @EnableDubbo
    public class WebBootStarter {
    
        public static void main(String[] args) {
            SpringApplication.run(WebBootStarter.class, args);
            System.out.println("==========WEB模块启动完成!==========");
        }
    
    }

    PS:@ComponentScan主要就是定义扫描的路径从中找出标识了需要装配的类自动装配到spring的bean容器中。

    调用服务

      http://localhost:8081/userManage/queryListUser

  • 相关阅读:
    图片的像素和位图相关的知识
    LeetCode第四十四题-字符串匹配
    LeetCode第四十三题-字符串相乘
    LeetCode第四十二题-可装雨水的容量
    LeetCode第四十一题-寻找数组中的最小的缺失正整数
    LeetCode第四十题-求组合所有可能性(2)
    LeetCode第三十九题-求组合所有可能性
    LeetCode第三十八题-报数
    LeetCode第三十七题-实现数独
    LeetCode第三十六题-判断九宫格是否有效
  • 原文地址:https://www.cnblogs.com/riches/p/11195184.html
Copyright © 2011-2022 走看看