参考相关文章:

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:

springboot如何通过apollo动态去注册dubbo服务的更多相关文章

  1. 查询dubbo服务

    1.公司内网肯定会有服务治理平台,把自己提供的服务接口当关键字查询即可. 2.命令方式实现 查看本机Dubbo服务是否启动,telnet localhost [端口号],端口号是在注册dubbo服务的 ...

  2. RPC原来就是Socket——RPC框架到dubbo的服务动态注册,服务路由,负载均衡演化

    序:RPC就是使用socket告诉服务端我要调你的哪一个类的哪一个方法然后获得处理的结果.服务注册和路由就是借助第三方存储介质存储服务信息让服务消费者调用.然我们自己动手从0开始写一个rpc功能以及实 ...

  3. SpringBoot之多数据源动态切换数据源

    原文:https://www.jianshu.com/p/cac4759b2684 实现 1.建库建表 首先,我们在本地新建三个数据库名分别为master,slave1,slave2,我们的目前就是写 ...

  4. 在kubernetes集群里集成Apollo配置中心(6)之实战使用apollo分环境管理dubbo服务

    生产实践 1.迭代新需求/修复BUG(编码--->提git) 2.测试环境发版,测试(应用通过编译打包发布至test命名空间) 3.测试通过,上线(应用镜像直接发布至prod命名空间) 系统架构 ...

  5. 阿里dubbo服务注册原理解析

           阿里分布式服务框架 dubbo现在已成为了外面很多中小型甚至一些大型互联网公司作为服务治理的一个首选或者考虑方案,相信大家在日常工作中或多或少都已经用过或者接触过dubbo了.但是我搜了 ...

  6. SpringBoot(十一)-- 动态数据源

    SpringBoot中使用动态数据源可以实现分布式中的分库技术,比如查询用户 就在用户库中查询,查询订单 就在订单库中查询. 一.配置文件application.properties # 默认数据源 ...

  7. SpringBoot整合MyBatisPlus配置动态数据源

    目录 SpringBoot整合MyBatisPlus配置动态数据源 SpringBoot整合MyBatisPlus配置动态数据源 推文:2018开源中国最受欢迎的中国软件MyBatis-Plus My ...

  8. spring-boot系列:(一)整合dubbo

    spring-boot-2整合dubbo 新框架学习,必须上手干.书读百遍,其义自见. 本文主要介绍spring-boot-2整合dubbo,使用xml配置实现一个provider和consumer. ...

  9. Dubbo服务注册与发现

    目录 一.分布式基本理论 1.1.分布式基本定义 1.2 架构发展演变 1.3.RPC简介 二.Dubbo理论简介 三.Dubbo环境搭建 3.1 Zookeeper搭建 3.2 Dubbo管理页面搭 ...

随机推荐

  1. Jmeter线程组设置

    添加线程组:右键测试计划->添加->Threads->线程组 左侧树形标签栏中,显示标签信息. 选中线程组,右侧内容栏中显示线程组的相关信息. 名称:可以给线程组设置一个个性化的命名 ...

  2. MySQL update 链表 (一个表数据当做条件错误时候的转换)

    MySQL语句一: UPDATE lesson_p set solve_status = 6 where lesson_p_id in (SELECT lp.lesson_p_id FROM `les ...

  3. 支持remote write和exemplar的prometheus服务

    最近项目组在做Prometheus指标采集和告警,其中用到了Prometheus的exemplar特性,由于该特性比较新,当前支持该特性的存储有比较少.因此需要自行实现exemplar功能. 我在gi ...

  4. Cobar提出的一种在分库场景下对Order By / Limit 的优化

    搜索关注微信公众号"捉虫大师",后端技术分享,架构设计.性能优化.源码阅读.问题排查.踩坑实践. 本文已收录 https://github.com/lkxiaolou/lkxiao ...

  5. 洛谷3628 APIO2010特别行动队(斜率优化)

    考虑最普通的\(dp\) \[dp[i]=max(dp[j]+a*(sum[i]-sum[j])^2+b*(sum[i]-sum[j])+c \] qwq 由于演算纸扔掉了 qwq 所以直接给出最后的 ...

  6. 【原创】C语言和C++常见误区(一)

    本文仅在博客园发布,认准原文地址:https://www.cnblogs.com/jisuanjizhishizatan/p/15414469.html 问题1:int类型占几个字节? 常见误区:占4 ...

  7. selenium去特征

    code from selenium import webdriver chrome_options = webdriver.ChromeOptions() chrome_options.add_ex ...

  8. 7-Zip

    7-Zip https://www.7-zip.org/

  9. Spark解决SQL和RDDjoin结果不一致问题(工作实录)

    问题描述:DataFrame的join结果不正确,dataframeA(6000无重复条数据) join dataframeB(220条无重复数据,由dataframeA转化而来,key值均源于dat ...

  10. scala基础篇 使用getter和setter方法而不使用public的情形

    主要是基于2种情形 1) 提供读只取/只写入方法,不能随意读写 2)做赋值时变量控制,比如设定值的区间范围等 例子: object test{ def main(args: Array[String] ...