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:
springboot如何通过apollo动态去注册dubbo服务的更多相关文章
- 查询dubbo服务
1.公司内网肯定会有服务治理平台,把自己提供的服务接口当关键字查询即可. 2.命令方式实现 查看本机Dubbo服务是否启动,telnet localhost [端口号],端口号是在注册dubbo服务的 ...
- RPC原来就是Socket——RPC框架到dubbo的服务动态注册,服务路由,负载均衡演化
序:RPC就是使用socket告诉服务端我要调你的哪一个类的哪一个方法然后获得处理的结果.服务注册和路由就是借助第三方存储介质存储服务信息让服务消费者调用.然我们自己动手从0开始写一个rpc功能以及实 ...
- SpringBoot之多数据源动态切换数据源
原文:https://www.jianshu.com/p/cac4759b2684 实现 1.建库建表 首先,我们在本地新建三个数据库名分别为master,slave1,slave2,我们的目前就是写 ...
- 在kubernetes集群里集成Apollo配置中心(6)之实战使用apollo分环境管理dubbo服务
生产实践 1.迭代新需求/修复BUG(编码--->提git) 2.测试环境发版,测试(应用通过编译打包发布至test命名空间) 3.测试通过,上线(应用镜像直接发布至prod命名空间) 系统架构 ...
- 阿里dubbo服务注册原理解析
阿里分布式服务框架 dubbo现在已成为了外面很多中小型甚至一些大型互联网公司作为服务治理的一个首选或者考虑方案,相信大家在日常工作中或多或少都已经用过或者接触过dubbo了.但是我搜了 ...
- SpringBoot(十一)-- 动态数据源
SpringBoot中使用动态数据源可以实现分布式中的分库技术,比如查询用户 就在用户库中查询,查询订单 就在订单库中查询. 一.配置文件application.properties # 默认数据源 ...
- SpringBoot整合MyBatisPlus配置动态数据源
目录 SpringBoot整合MyBatisPlus配置动态数据源 SpringBoot整合MyBatisPlus配置动态数据源 推文:2018开源中国最受欢迎的中国软件MyBatis-Plus My ...
- spring-boot系列:(一)整合dubbo
spring-boot-2整合dubbo 新框架学习,必须上手干.书读百遍,其义自见. 本文主要介绍spring-boot-2整合dubbo,使用xml配置实现一个provider和consumer. ...
- Dubbo服务注册与发现
目录 一.分布式基本理论 1.1.分布式基本定义 1.2 架构发展演变 1.3.RPC简介 二.Dubbo理论简介 三.Dubbo环境搭建 3.1 Zookeeper搭建 3.2 Dubbo管理页面搭 ...
随机推荐
- 谷歌浏览器chrome安装插件报"程序包无效: CRX_HEADER_INVALID"错误
今天参加需求评审,看到原来可以谷歌浏览器查看Axure原型文件,真是只有想不到,没有做不到(自己孤陋寡闻了,第一次接触Axure). 需求评审后,我百度"如何使用谷歌浏览器查看Axure原型 ...
- javascript 对象池
* 一个对象池的简单应用 tool tip tootip.html <html> <head> <meta charset="UTF-8"> & ...
- 关于cgroup的几个核心名词及其关系
子系统(subsystem) 所谓子系统可以理解为操作系统里的各种资源(组件),如CPU,内存,磁盘,网卡(带宽) 层级(Hierarchies) 所谓层级就是子系统的集合,又 ...
- python二级 第9套
1. prInt.默认输出空格 2. 我的这种想法也行不通啊 format() 一次只能有一个未知量 2. 分割的结果就是列表 3. 对比"大学" 上一套的split('&q ...
- 鸿蒙内核源码分析(字符设备篇) | 字节为单位读写的设备 | 百篇博客分析OpenHarmony源码 | v67.01
百篇博客系列篇.本篇为: v67.xx 鸿蒙内核源码分析(字符设备篇) | 字节为单位读写的设备 | 51.c.h.o 文件系统相关篇为: v62.xx 鸿蒙内核源码分析(文件概念篇) | 为什么说一 ...
- 鸿蒙内核源码分析(原子操作篇) | 是谁在为原子操作保驾护航 | 百篇博客分析OpenHarmony源码 | v34.02
百篇博客系列篇.本篇为: v34.xx 鸿蒙内核源码分析(原子操作篇) | 谁在为原子操作保驾护航 | 51.c.h .o 本篇说清楚原子操作 读本篇之前建议先读鸿蒙内核源码分析(总目录)系列篇. 基 ...
- Python自动化测试发送邮件太麻烦?!一起聊一聊 Python 发送邮件的3种方式
1. 前言 发送邮件,我们在平时工作中经用到,做为测试人员,在自动化测试中用的也比较多,需要发送邮件给某领导 SMTP是Python默认的邮件模块,可以发送纯文本.富文本.HTML 等格式的邮件 今天 ...
- Redis 高可用篇:你管这叫主从架构数据同步原理?
在<Redis 核心篇:唯快不破的秘密>中,「码哥」揭秘了 Redis 五大数据类型底层的数据结构.IO 模型.线程模型.渐进式 rehash 掌握了 Redis 快的本质原因. 接着,在 ...
- 前端开发3年了,竟然不知道什么是 Vue 脚手架?(上)
一.脚手架认识和使用前提 CLI 是什么意思? CLI -- Command-Line Interface 命令行界面,俗称脚手架. 脚手架就是一个大概的框架,是建筑学上的一个概念. 1.1.什么是V ...
- 使用 grpcurl 通过命令行访问 gRPC 服务
原文链接: 使用 grpcurl 通过命令行访问 gRPC 服务 一般情况下测试 gRPC 服务,都是通过客户端来直接请求服务端.如果客户端还没准备好的话,也可以使用 BloomRPC 这样的 GUI ...