• springboot如何通过apollo动态去注册dubbo服务


    参考相关文章:

     apollo官方文档:  https://dubbo.apache.org/zh/docs/v2.7/user/configuration/configuration-load-process/

     Dubbo注解方式与spring的整合原理即@DubboService的机制:   https://blog.csdn.net/leisurelen/article/details/107019516

    第一步:apollo配置:

    spring.application.name = csc-mbhk-loyalty-member
    dubbo.scan.base-packages = com.aswatson.csc.member.service
    dubbo.registry.protocol = zookeeper
    dubbo.registry.address = 127.0.0.1:2181
    dubbo.protocol.name = dubbo
    dubbo.protocol.port = -1
    dubbo.protocol.dispatcher = message
    dubbo.protocol.threadpool = cached
    dubbo.protocol.threads = 800
    。。。。。。。

    第二步:注销springboot里面配置的加载dubbo的xml配置和springboot管理的dubbo的bean:


    <!--
    <dubbo:protocol name="dubbo" port="-1" dispatcher="message" threadpool="cached" threads="${cdc_mbhk_loyalty_member_threads:800}"/>-->

    第三步:启动类加上注解:@EnableDubbo:

    package com.aswatson.csc.member;
    
    import java.util.concurrent.Executor;
    import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
    import org.apache.dubbo.config.spring.context.annotation.EnableDubboConfig;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryCustomizer;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.ImportResource;
    import org.springframework.scheduling.annotation.EnableAsync;
    import org.springframework.scheduling.annotation.EnableScheduling;
    
    import io.micrometer.core.instrument.MeterRegistry;
    import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
    
    /**
     * @author Albert.Yang
     */
    @Configuration
    @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
    @ComponentScan({"com.aswatson.csc.member.*"})
    @EnableDubbo
    @MapperScan("com.aswatson.csc.member.infrastructure.dao.mapper.*")
    @ImportResource(locations = {"classpath:dubbo/spring-csc-member-agent-context.xml"})
    @EnableDiscoveryClient
    @EnableScheduling
    @EnableAsync
    public class MemberApplication {
        public static void main(String[] args) {
            SpringApplication.run(MemberApplication.class, args);
        }
    
        @Bean
        MeterRegistryCustomizer<MeterRegistry> configurer(@Value("${spring.application.name}") String applicationName) {
            return registry -> registry.config().commonTags("application", applicationName);
        }
    
    }

    第四步:MemberCardService层加注解@DubboService和修改配置:

    /**
     * @Author Tim.Li
     * @Date 2020/4/3 14:56
     */
    //ConditionalOnProperty是为了如果配置了,就可以动态开启是否加载,注册这个service配置
    @ConditionalOnProperty(value = "${dubbo.service.com.aswatson.csc.member.service.MemberCardService}",havingValue = "true")
    @Component
    @Slf4j
    @DubboService(interfaceClass = MemberCardService.class ,version = "1.0", group = "${pos}")
    public class MemberCardServiceImpl implements MemberCardService {
    
        @Override
        @Transactional
        public ResponseMessages<MemberUpsetResVO> updateMemberInfo(MemberUpsetVO memberUpsetVO) {
    
            System.out.println("=====================================1");
            return null;
    
        }
    }

    解释:用dubboService注入的bean:MemberCardService 会和原生的 org.springframework.beans. 包的注入@Autowired 方式冲突,

    因为一种是spring框架自己管理的bean方式,dubboService的是通过dubbo方式来注入和管理bean。需要统一成一致的,或者兼容(暂无测试兼容的版本)。

    第五步:通过入口层调用dubbo服务:

        private static MemberCardService memberCardService = (MemberCardService) ApplicationContextRegister
                .getApplicationContext().getBean("memberCardService");
      //写在方法里面:
    ResponseMessages<MemberUpsetResVO> responseMessages = memberCardService.updateMemberInfo(memberUpsertVO);
    package com.siebel.api.server;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.BeansException;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;
    import org.springframework.context.annotation.Lazy;
    import org.springframework.stereotype.Component;
    
    @Component
    @Lazy(false)
    public class ApplicationContextRegister implements ApplicationContextAware {
        private static final Logger LOGGER = LoggerFactory.getLogger(ApplicationContextRegister.class);
        private static ApplicationContext APPLICATION_CONTEXT;
    
        /**
         * * 设置spring上下文 * * @param applicationContext spring上下文 * @throws
         * BeansException
         */
        @Override
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
            LOGGER.debug("ApplicationContext registed-->{}", applicationContext);
            APPLICATION_CONTEXT = applicationContext;
        }
    
        public static ApplicationContext getApplicationContext() {
            return APPLICATION_CONTEXT;
        }
    }

    .................测试结果如下:

    1.dubbo服务提供者项目起来之后,需要监控prodvier:是否注册到dubbo服务,拥到的工具:PrettyZoo

    2.启动消费者服务,去调用provider的dubbo服务:

     结果: 调用成功。注销了springboot模式下加载dubbo的bean模式,不需要配置xml形式的dubbo的bean:

    路在脚下
  • 相关阅读:
    nodejs实现端到端加密
    DiffieHellman(迪菲-赫尔曼)密钥交换算法原理及其实现
    MongoDB主备 版本3.6.5
    linux源地址转换
    Mac下IDEA快捷键操作
    Ubuntu离线安装gcc
    VM安装Mac时,使用Unlocker12 插件时报getTools错误的问题
    华为OSPF与ACL综合应用实例讲解
    基于全局地址池的DHCP
    浮动静态路由及负载均衡
  • 原文地址:https://www.cnblogs.com/lgg20/p/15530397.html
Copyright © 2020-2023  润新知