Spring Cloud 核心组件 Dubbo-Nacos_m0_37567301的博客-程序员宅基地

技术标签: cloud  微服务  java  

Spring Cloud 核心组件 Dubbo-Nacos

  • 作者:DecaMinCow
  • 博客:http://blog.csdn.net/m0_37567301
  • 邮箱:decamincow#gmail.com (#->@)

Dubbo 介绍

阿里研发的 RPC 框架

注册中心为 nacos 的 dubbo 示例

1. Provider

依赖文件

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-apache-dubbo-adapter</artifactId>
</dependency>
<!--dubbo 服务接口依赖-->
<dependency>
    <groupId>com.decamincow.learning.springcloud</groupId>
    <artifactId>dubbo-api</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

配置文件

server:
  port: 8083
spring:
  application:
    name: resume
  # nacos 配置
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
  main:
    allow-bean-definition-overriding: true
management:
  endpoints:
    web:
      exposure:
        include: "*"
dubbo:
  scan:
    # dubbo 服务扫描基准包
    base-packages: com.decamincow.learning.springcloud.service.impl
  protocol:
    # dubbo 协议
    name: dubbo
    # dubbo 协议端口( -1 表示自增端口,从 20880 开始)
    port: -1
    host: 127.0.0.1
  registry:
    # 挂载到 Spring Cloud 的注册中心
    address: spring-cloud://localhost

实现类
这里的 @Service 注解要注意事项 dubbo 的

import com.decamincow.learning.springcloud.ResumeService;
import com.decamincow.learning.springcloud.dao.ResumeDao;
import com.decamincow.learning.springcloud.model.Resume;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Example;

/**
 * @ClassName ResumeServiceImpl
 * @Description TODO
 * @Author decamincow
 * @Date 2020/5/25 2:17 AM
 * @Version 1.0
 **/
@Service
public class ResumeServiceImpl implements ResumeService {

    @Autowired
    private ResumeDao resumeDao;

    @Override
    public Resume findDefaultResumeByUserId(Long userId) {
        Example<Resume> example = Example.of(Resume.builder().userId(userId).isDefault(1).build());
        return resumeDao.findOne(example).get();
    }
}

启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

/**
 * @ClassName ResumeApplication
 * @Description TODO
 * @Author decamincow
 * @Date 2020/5/25 2:23 AM
 * @Version 1.0
 **/
@SpringBootApplication
@EntityScan("com.decamincow.learning.springcloud.model")
@EnableDiscoveryClient // 开启注册中心客户端
public class ResumeApplicationNacosSentinelDubbo8083 {

    public static void main(String[] args) {
        SpringApplication.run(ResumeApplicationNacosSentinelDubbo8083.class, args);
    }

}

2. Consumer

依赖文件

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

<!-- Sentinel支持采用 Nacos 作为规则配置数据源,引入该适配依赖 -->
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
</dependency>

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-apache-dubbo-adapter</artifactId>
</dependency>
<!--dubbo 服务接口依赖-->
<dependency>
    <groupId>com.decamincow.learning.springcloud</groupId>
    <artifactId>dubbo-api</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

配置文件

server:
  port: 8094
spring:
  application:
    name: autodeliver
  # nacos 配置
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848    
  main:
    allow-bean-definition-overriding: true
management:
  endpoints:
    web:
      exposure:
        include: "*"

dubbo:
  registry:
    # 挂载到 Spring Cloud 注册中心
    address: spring-cloud://localhost
  cloud:
    # 订阅服务提供方的应用列表,订阅多个服务提供者使用 "," 连接
    subscribed-services: resume

Controller
这里用的 @Reference 注入

import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.decamincow.learning.springcloud.ResumeService;
import com.decamincow.learning.springcloud.config.SentinelHandlersClass;
import com.decamincow.learning.springcloud.model.Resume;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @ClassName AutodeliverController
 * @Description TODO
 * @Author decamincow
 * @Date 2020/5/25 3:10 AM
 * @Version 1.0
 **/
@RestController
@RequestMapping("/autodeliver")
public class AutodeliverController {

    @Reference
    private ResumeService resumeService;

    // /autodeliver/checkState/1545132
    @GetMapping("/checkState/{userId}")
    @SentinelResource(value = "findResumeOpenState",blockHandlerClass = SentinelHandlersClass.class,
            blockHandler = "handleException",fallbackClass = SentinelHandlersClass.class,fallback = "handleError")
    public Resume findResumeOpenState(@PathVariable Long userId) {

        return resumeService.findDefaultResumeByUserId(userId);

    }
}

启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

/**
 * @ClassName com.decamincow.learning.springcloud.controller.AutodeliverApplcation8091
 * @Description TODO
 * @Author decamincow
 * @Date 2020/5/25 3:11 AM
 * @Version 1.0
 **/
@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})
@EnableDiscoveryClient
public class AutodeliverApplcationNacosSentinelDubbo8094 {
    public static void main(String[] args) {
        SpringApplication.run(AutodeliverApplcationNacosSentinelDubbo8094.class, args);
    }

}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_37567301/article/details/106556679

智能推荐

jmap_weixin_30552811的博客-程序员宅基地

java.lang.OutOfMemoryError: Java heap space当应用程序申请更多的内存,而Java堆内存已经无法满足应用程序对内存的需要,就会抛出此种异常。java.lang.OutOfMemoryError: PermGen space及其解决方法表示Java永久带(方法区)空间不够,永久带用于存放类的字节码和长常量池,类的字节码加载后存放在这个区域,这和存放...

基于 MVP 的 Android 组件化开发框架实践_weixin_34138139的博客-程序员宅基地

一、背景当我们的项目变得越来越大,代码变得越来越臃肿,耦合会越来越多,编译速度越来越慢,开发效率也会变得越来越低,怎么办?这个时候我们就需要对旧项目进行重构,即是模块的拆分,官方的说法就是组件化。二、简介那什么是组件化呢?其基本理念是:把常用的功能、控件、基础类、第三方库、权限等公共部分抽离封装,我们称之为基础组件(baselibs);把业务分成 N 个模块进行独立的管理,每一个模块我们称之...

计算机专业考研入坑详解(持续更新)_蓝调一战上岸!的博客-程序员宅基地_计算机专业考研

考试科目英语:100分数学:150分政治:100分专业课:150分。计算机考研408初试考试要求以及考试科目主要有:数据结构45分计算机组成原理45分操作系统35分计算机网络25分未办事项:1.计算机考研408统考该如何准备?...

我踩过的那些坑_Neon-L的博客-程序员宅基地

自己踩过的那些坑开发javaweb项目使用邮箱激活遇到的问题开发javaweb项目使用邮箱激活遇到的问题问题描述: 我们使用代码发送邮件,邮件的正文中有一个超链接,超链接是get请求会携带一些参数,来完成用户的激活操作,一开始我们一切都还是很顺利的完成了,我们也在qq邮箱中收到了邮件,但是当我们点击邮件正文的超链接时,却无法跳转。下面我们说一下解决办法:这个是我们发送的正文内容。Str...

android zxing生成条形码,使用ZXing创建android条形码扫描应用程序_weixin_39926394的博客-程序员宅基地

ZXing项目提供了一个独立的条形码阅读器应用程序,—通过 Intent 机制—可以被其他希望集成条码扫描的应用程序调用。最简单的方法是调用 ZXing SCANIntent 从你的应用程序,这样的:public Button.OnClickListener mScan = new Button.OnClickListener() {public void onClick(View v) {Int...

【转】C++中的虚函数(表)实现机制以及用C语言对其进行的模拟实现_eyz12315的博客-程序员宅基地

前言大家都应该知道C++的精髓是虚函数吧? 虚函数带来的好处就是: 可以定义一个基类的指针, 其指向一个继承类, 当通过基类的指针去调用函数时, 可以在运行时决定该调用基类的函数还是继承类的函数. 虚函数是实现多态(动态绑定)/接口函数的基础. 可以说: 没有虚函数, C++将变得一无是处!既然是C++的精髓, 那么我们有必要了解一下她的实现方式吗? 有必要! 既然C++是从C语言的基础上发展...

随便推点

2021武汉理工大学计算机考研初试经验总结_小宝..的博客-程序员宅基地_武汉理工大学计算机考研

2021武汉理工大学计算机考研初试经验总结杂谈一、pandas是什么?二、使用步骤1.引入库2.读入数据总结杂谈  :例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码如下(示例):import numpy as npimport

Tiny210--3--基于Tiny210的CMOS摄像头图像采集_明宇朗心的博客-程序员宅基地

基于Tiny210的图像采集1、串口终端CMOS 树莓派 OV7670摄像头[[email protected] web-cam]# [15279.408438] usb 1-1.3: new high speed USB devicenumber 5 using s5p-ehci[15279.598686] uvcvideo: Found UVC 1.00 device ...

Android 数据存储——SQLite_小飞哥0217的博客-程序员宅基地

文章目录0 前言1 创建数据库1.1 create1.2 openDatabase1.3 openOrCreateDatabase1.4 SQLiteOpenHelper1.5 使用场景2 插入数据3 删除数据4 更新数据5 查询数据6 事务7 结束语0 前言SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的...

【MySQL5.7.24 安装教程】_I深巷的博客-程序员宅基地_mysql安装教程5.7.24

MySQL5.7.24详细安装教程一、下载网址:https://dev.mysql.com/downloads/二、下载完成后解压 ...三、配置环境变量四、创建配置文件my.ini五、安装六、启动服务或者通过命令启动七、开启MySQL远程访问一、下载网址:https://dev.mysql.com/downloads/1、2、3二、下载完成后解压 …三、配置环境变量1、在系统变量里添加变量名:MYSQL_HOME变量值:D:\SoftWare\Java\mysql-5.7.242

Spark Executor解析_Quinto0的博客-程序员宅基地_spark 的executor

目录1、Spark Executor如何工作2、Spark Executor工作源码1、Spark Executor如何工作当Driver发送过来Task的时候,其实是发送给CoarseGrainedExecutorBackend这个RPCEndpoint,而不是直接发送给Executor(Executor由于不是消息循环体永远也无法接收远程发过来的信息)。Driver向...

SSM分页插件使用_魏正源的博客-程序员宅基地_ssm分页插件使用

jar包坐标&lt;!--分页插件的jar包--&gt;&lt;dependency&gt; &lt;groupId&gt;com.github.pagehelper&lt;/groupId&gt; &lt;artifactId&gt;pagehelper&lt;/artifactId&gt; &lt;version&gt;5.1.10&lt;/version&gt;&lt;/dependency&gt;controller中方法@RequestMapping("/sho

推荐文章

热门文章

相关标签