前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >分布式技术之dubbo二

分布式技术之dubbo二

作者头像
张哥编程
发布于 2024-12-13 05:51:39
发布于 2024-12-13 05:51:39
7601
代码可运行
举报
文章被收录于专栏:云计算linux云计算linux
运行总次数:1
代码可运行

1,课程回顾 2,本章重点 父子工程的使用,子工程相互调用 springboot+mybatis+dubbo+zookeeper+mysql 部署一个dubbo_admin治理项目(可以对提供者和消费者进行管理) dubbo负载均衡功能 3,具体内容 3.1 springboot,mybatis整合dubbo 3.1.1创建父项目(springboot+mybatis方式创建),pom.xml引入jar:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!--引入springboot 和dependencies并列-->
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.5.7</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>
 
<!--springboot web包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--简化实例类包-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- Spring Boot Dubbo 依赖 -->
<dependency>
<groupId>com.alibaba.spring.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<!-- zookeeper依赖 -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>

3.1.2 创建子项目common 创建公共的实体类和服务层接口 3.1.3创建子项目consumer

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
            <groupId>com.aaa</groupId>
            <artifactId>common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

新建启动类并加入dubbo支持:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.aaa.pc;
import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
 * @ fileName:PowerConsumerApplication
 * @ description:
 * @ author:zhz
 * @ createTime:2022/1/5 9:51
 * @ version:1.0.0
 */
@SpringBootApplication
@EnableDubboConfiguration  //开启dubbo配置
public class PowerConsumerApplication {
    public static void main(String[] args) {
        //run方法
        SpringApplication.run(PowerConsumerApplication.class,args);
    }
}

编写controller,引入Service:

@Reference(check=false) Dubbo 缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring 初始化完成,以便上线时,能及早发现问题,默认 check=“true”. 可以通过 check=“false” 关闭检查,比如,测试时,有些服务不关心,或者出现了循环依赖,必须有一方先启动。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.aaa.pc.controller;
import com.aaa.common.controller.BaseController;
import com.aaa.common.entity.Menu;
import com.aaa.common.service.MenuService;
import com.aaa.common.util.Result;
import com.alibaba.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.Map;
/**
 * 菜单权限表(Menu)表控制层
 *
 * @author makejava
 * @since 2022-01-05 09:45:33
 */
@RestController
@RequestMapping("menu")
public class MenuController extends BaseController {
    /**
     * 服务对象
     */
    @Reference(check = false)   //没有配置文件,直接使用引用注解
    private MenuService menuService;
    /**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 单条数据
     */
    @GetMapping("selectOne")
    public Result selectOne(Integer id) {
        return this.success(this.menuService.queryById(id));
    }

    /**
     * 添加
     *
     * @param menu
     * @return
     */
    @PutMapping("add")
    public Result add(@RequestBody Menu menu) {
        return this.success(this.menuService.insert(menu));
    }
    /**
     * 更新
     *
     * @param menu
     * @return
     */
    @PutMapping("update")
    public Result update(@RequestBody Menu menu) {
        return this.success(this.menuService.update(menu));
    }
    /**
     * 根据编号删除
     *
     * @param id
     * @return
     */
    @DeleteMapping("deleteById")
    public Result deleteById(Integer id) {
        return this.success(this.menuService.deleteById(id));
    }
}
application.properties:
#访问端口号
server.port=18090
#dubbo - customer名称
spring.dubbo.application.name=power_customer

zookeeper 注册中心

spring.dubbo.registry.address=zookeeper://192.168.170.41:2181 #dubbo 通信端口 spring.dubbo.protocol.name=dubbo spring.dubbo.protocol.port=20881 3.1.4创建子项目provider

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pom.xml
       <dependency>
    <groupId>com.aaa</groupId>
    <artifactId>common</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.0</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.10</version>
</dependency>
<!--druid包-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.8</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.8</version>
</dependency>

启动类加入:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.aaa.pp;
import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.transaction.annotation.EnableTransactionManagement;
/**
 * @ fileName:PowerProviderApplication
 * @ description:
 * @ author:zhz
 * @ createTime:2022/1/5 10:32
 * @ version:1.0.0
 */
@SpringBootApplication
@EnableDubboConfiguration
//@EnableTransactionManagement
public class PowerProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(PowerProviderApplication.class,args);
    }
}
          
编写服务实现类加入  @server 
            @com.alibaba.dubbo.config.annotation.Service
            @Service  为dubbo 注解,注解暴露服务
application.properties:
spring.datasource.druid.url=jdbc:mysql://localhost:3306/db_qy141
spring.datasource.druid.username=root
spring.datasource.druid.password=root
spring.datasource.druid.initial-size=5
spring.datasource.druid.max-active=20
spring.datasource.druid.min-idle=10
spring.datasource.druid.max-wait=10
#端口号
server.port=19090
#dubbo 服务名称
spring.dubbo.application.name=power_provider

zookeeper 注册中心

spring.dubbo.registry.address=zookeeper://192.168.170.41:2181 #zookeeper 通信端口 spring.dubbo.protocol.name=dubbo spring.dubbo.protocol.port=20881 3.2 服务治理 3.2.1 多台zk集群 前面配置过,直接启动 3.2.2 配置治理项目,并且测试 配置tomcat tar -xzvf /root/software/apache-tomcat-9.0.52.tar.gz -C /usr/ vim /etc/profile 修改为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export PATH=$PATH:$JAVA_HOME/bin:$ZK_HOME/bin:/usr/apache-tomcat-9.0.52/bin

生效: source /etc/profile startup.sh 查看是否启动成功 jps 或者 ps -ef |grep tomcat |grep -v grep jps 可以看到Bootstrap进程 复制准备好dubbo-admin项目到tomcat下 使用xft 把dubbo-admin.war上传到/usr/apache-tomcat-9.0.52/webapps/ 修改配置 vim /usr/apache-tomcat-9.0.52/webapps/dubbo-admin/WEB-INF/dubbo.properties 修改第一行: 127.0.0.1 修改为 192.168.xxx.41 (zk所在的机子IP) 启动zk集群: /root/shelldir/zk-start-stop.sh 测试 ​​​ http://192.168.170.41:8080/dubbo-admin/​​​ 3.2.3 启动提供者和消费者,查看admin项目变化

分布式技术之dubbo二_dubbo
分布式技术之dubbo二_dubbo
分布式技术之dubbo二_ide_02
分布式技术之dubbo二_ide_02

3.3 负载均衡,集群容错, 服务降级(半权) 路由规则,动态配置,访问控制,权重调节

打包生成多个服务:

分布式技术之dubbo二_spring_03
分布式技术之dubbo二_spring_03
分布式技术之dubbo二_分布式_04
分布式技术之dubbo二_分布式_04
分布式技术之dubbo二_spring_05
分布式技术之dubbo二_spring_05
分布式技术之dubbo二_spring_06
分布式技术之dubbo二_spring_06

cd soft/

使用xftp 把provider_jar上传

cd provider_jar/

java -jar

java -jar provider.jar

运行出错:slf4j-log4j12-1.7.26.jar

修改META-INF/MANIFEST.MF文件,删除slf4j-log4j12-1.7.26.jar包,再次打包运行

再次rebuild 时,要再次修改META-INF/MANIFEST.MF 文件中多余的jar

分布式技术之dubbo二_分布式_07
分布式技术之dubbo二_分布式_07
分布式技术之dubbo二_spring boot_08
分布式技术之dubbo二_spring boot_08
分布式技术之dubbo二_dubbo_09
分布式技术之dubbo二_dubbo_09
分布式技术之dubbo二_分布式_10
分布式技术之dubbo二_分布式_10

4,知识点总结 5,本章面试题

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【Java】已解决:org.springframework.web.HttpMediaTypeNotSupportedException
已解决:org.springframework.web.HttpMediaTypeNotSupportedException
屿小夏
2024/09/15
7300
【Java】已解决:org.springframework.web.HttpMediaTypeNotSupportedException
如何完美解决 org.springframework.http.converter.HttpMessageNotReadableException: JSON parse 错误
在Spring Boot项目中,org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error 是一个常见的错误。本博客将详细介绍该错误的原因、解决方案以及最佳实践,帮助开发者在项目中避免和处理此类错误。关键词:Spring Boot,JSON parse error,HttpMessageNotReadableException,异常处理。
猫头虎
2024/06/21
2.9K0
【Java】已解决:org.springframework.http.converter.HttpMessageNotWritableException
已解决:org.springframework.http.converter.HttpMessageNotWritableException
屿小夏
2024/09/15
1.4K0
【Java】已解决:org.springframework.http.converter.HttpMessageNotWritableException
【Java】已解决:org.springframework.web.client.HttpClientErrorException: 400
已解决:org.springframework.web.client.HttpClientErrorException: 400
屿小夏
2024/09/16
4720
【Java】已解决:org.springframework.web.client.HttpClientErrorException: 400
Spring3 RestTemplate
RestTemplate是执行HTTP请求的同步阻塞式的客户端,它在HTTP客户端库(例如JDK HttpURLConnection,Apache HttpComponents,okHttp等)基础封装了更加简单易用的模板方法API。也就是说RestTemplate是一个封装,底层的实现还是java应用开发中常用的一些HTTP客户端。但是相对于直接使用底层的HTTP客户端库,它的操作更加方便、快捷,能很大程度上提升我们的开发效率。
HLee
2021/04/25
3.2K0
Spring3 RestTemplate
【Python】已解决:org.springframework.web.client.HttpServerErrorException: 500
在使用Spring框架进行Web开发时,开发者可能会遇到org.springframework.web.client.HttpServerErrorException: 500的报错问题。该错误通常发生在通过Spring的RestTemplate类发送HTTP请求时,服务器返回了500内部服务器错误。这种错误表示服务器在处理请求时遇到了意外情况,导致无法完成请求。
屿小夏
2024/07/13
4130
Spring Boot – 使用 ModelMapper 将实体映射到 DTO
在企业应用中,我们使用RESTful服务来建立客户端和服务器之间的通信。总体思路是客户端将请求发送到服务器,服务器用一些响应来响应该请求。一般来说,我们大多数应用程序都具有三个不同的层:Web层、业务层和数据库层。这些层中的对象大多彼此不同。例如,Web层对象与数据库层中的同一对象完全不同。由于数据库对象可能包含 Web 层对象中不需要的字段,例如自动生成的字段、密码字段等。
用户1418987
2023/10/26
1.3K0
Spring Boot – 使用 ModelMapper 将实体映射到 DTO
【Python】已解决:org.springframework.web.bind.MissingServletRequestParameterException
已解决:org.springframework.web.bind.MissingServletRequestParameterException
屿小夏
2024/09/05
3510
Spring Boot从零入门5_五脏俱全的RESTful Web Service构建
这一节我们正式进入Spring Boot的WEB服务开发,在WEB服务中,不可缺少的我们需要去提供API出来,那么就少不了设计API,而当前流行的一套API设计风格就是REST API ,接下来我们会介绍什么是RESTful API以及它的特点和如何去设计。完成设计后,我们会使用Spring Boot + MVC架构去实现一个RESTful Web Service。本文的所有内容都是经过多方面考察和参考官方资料,本着严谨的态度为自己也为一起学习的同学们负责,由浅入深,层层展开,让自己有不一样的收获。一起加油吧!
别打名名
2019/12/23
1.1K0
Spring Boot从零入门5_五脏俱全的RESTful Web Service构建
SpringMVC+RestFul详细示例实战教程(实现跨域访问)
**REST(Representational State Transfer)**,中文翻译叫“表述性状态转移”。是 Roy Thomas Fielding 在他2000年的博士论文中提出的。它与传统的 SOAP Web 服务区别在于,REST关注的是要处理的数据,而 SOAP 主要关注行为和处理。要理解好 REST,根据其首字母拆分出的英文更容易理解。
好好学java
2018/06/11
1.2K0
基于 MVC的 RESTful风格的实现
可以看到通过这个 RESTAPI都是通过对同一个资源==的操作,所不同的就是通过不同的HTTP方法来实现对资源不同的处理。
石的三次方
2021/01/05
7710
Spring WebClient vs RestTemplate——比较和特点
Spring 5 引入了一个名为 WebClient 的新反应式 Web 客户端。在这篇文章中,我将展示何时以及如何使用 Spring WebClient 与 RestTemplate。我还将描述 WebClient 提供的功能。
用户4235284
2023/10/14
1.2K0
每天用SpringBoot,还不懂RESTful API返回统一数据格式是怎么实现的?
有童鞋说,我们项目都做了这种处理,就是在每个 API 都单独工具类将返回值进行封装,但这种不够优雅;我想写最少的代码完成这件事,也许有童鞋说,加几个注解就解决问题了,说的没错,但这篇文章主要是为了说明为什么加了几个注解就解决问题了,目的是希望大家知其所以然。
二哥聊运营工具
2021/12/17
8330
每天用SpringBoot,还不懂RESTful API返回统一数据格式是怎么实现的?
Spring MVC 4 RESTFul Web Services CRUD例子(带源码)【这才是restful,超经典】
【本系列其他教程正在陆续翻译中,点击分类:spring 4 mvc 进行查看。源码下载地址在文章末尾。】
明明如月学长
2021/08/27
5400
spring_cloud config 配置中心及利用Github实现自动化热加载配置
    spring_cloud有着强大的生态支持,其自带的分布式配置中心可以有效解决分布式环境中配置不统一的问题,提供一个中心化的配置中心。并且依靠其spring_bus(rabbitMq提供订阅)和github或者gitlab自带的webhook(钩子函数)可以实现将修改好后的配置push到远程git地址后,通过访问配置服务器的endPoints接口地址,便可将配置中心的变化推送到各个集群服务器中。
chinotan
2019/04/03
1.1K0
spring_cloud config 配置中心及利用Github实现自动化热加载配置
补习系列-springboot 参数校验详解
在定义 Restful 风格的接口时,通常会采用 PathVariable 指定关键业务参数,如下:
美码师
2018/08/27
2.6K0
RestTemplate组件:ClientHttpRequestFactory、ClientHttpRequestInterceptor、ResponseExtractor【享学Spring MVC】
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
YourBatman
2019/09/18
4.7K0
RestTemplate组件:ClientHttpRequestFactory、ClientHttpRequestInterceptor、ResponseExtractor【享学Spring MVC】
【Java】已解决:ResponseEntityException的Spring MVC异常响应实体异常
已解决:ResponseEntityException的Spring MVC异常响应实体异常
屿小夏
2024/09/13
2100
SpringMVC 与 REST.
    我敢打赌这并不是你第一次听到或读到REST这个词。当讨论REST时,有一种常见的错误就是将其视为“基于URL的Web服务”—— 将REST作为另一种类型的RPC机制,只不过是通过简单的HTTP URL来触发。恰好相反,REST 和 RPC 几乎没有任何关系。RPC 是面向服务的,并关注于行为和动作;而REST 是面向资源的,强调描述应用程序的事物和名词。
JMCui
2018/08/01
1.2K0
Springboot — 用更优雅的方式发HTTP请求(RestTemplate详解)
RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。
Java_老男孩
2019/12/02
11.5K1
推荐阅读
【Java】已解决:org.springframework.web.HttpMediaTypeNotSupportedException
7300
如何完美解决 org.springframework.http.converter.HttpMessageNotReadableException: JSON parse 错误
2.9K0
【Java】已解决:org.springframework.http.converter.HttpMessageNotWritableException
1.4K0
【Java】已解决:org.springframework.web.client.HttpClientErrorException: 400
4720
Spring3 RestTemplate
3.2K0
【Python】已解决:org.springframework.web.client.HttpServerErrorException: 500
4130
Spring Boot – 使用 ModelMapper 将实体映射到 DTO
1.3K0
【Python】已解决:org.springframework.web.bind.MissingServletRequestParameterException
3510
Spring Boot从零入门5_五脏俱全的RESTful Web Service构建
1.1K0
SpringMVC+RestFul详细示例实战教程(实现跨域访问)
1.2K0
基于 MVC的 RESTful风格的实现
7710
Spring WebClient vs RestTemplate——比较和特点
1.2K0
每天用SpringBoot,还不懂RESTful API返回统一数据格式是怎么实现的?
8330
Spring MVC 4 RESTFul Web Services CRUD例子(带源码)【这才是restful,超经典】
5400
spring_cloud config 配置中心及利用Github实现自动化热加载配置
1.1K0
补习系列-springboot 参数校验详解
2.6K0
RestTemplate组件:ClientHttpRequestFactory、ClientHttpRequestInterceptor、ResponseExtractor【享学Spring MVC】
4.7K0
【Java】已解决:ResponseEntityException的Spring MVC异常响应实体异常
2100
SpringMVC 与 REST.
1.2K0
Springboot — 用更优雅的方式发HTTP请求(RestTemplate详解)
11.5K1
相关推荐
【Java】已解决:org.springframework.web.HttpMediaTypeNotSupportedException
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档