Linux操作系统中dubbo

news/2024/10/21 10:53:46/

1、简介

dubbo框架是做微服务通信的,是由阿里巴巴开发,后捐赠给阿帕奇基金会。

2、与OpenFeign的区别

dubbo是采用RPC协议实现微服务通信,OpenFeign是采用Http请求的方式实现的。

OpenFeign 最简单的,就是Spring公司开发的,整合SpringBoot的时候,代码简洁。

3、应用

要创建三个工程,api工程,消费者工程(consumer)和提供者工程(provider),api工程是用于另外两个工程引用的。

消费者工程和提供者工程 是要有共同的引用的,比如说:在传递请求的时候,要用user对象,那这个user对象就可以定义在api工程里,这样两个工程就都可以用了。还有Service层接口,也是要放到api工程里的。

0、启动nacos和redis

1、准备工程

创建三个项目

2、编写api工程

【1.添加依赖】

 <properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.6.13</spring-boot.version><jwt.version>0.7.0</jwt.version><fastjson.version>1.2.60</fastjson.version><spring-cloud-alibaba.version>2.0.3.RELEASE</spring-cloud-alibaba.version><spring-cloud.version>Finchley.SR2</spring-cloud.version></properties><dependencies>
​<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>${fastjson.version}</version><scope>compile</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version><scope>compile</scope></dependency>
​</dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>
​<!--2.添加当前项目所依赖的插件: --><build><plugins><!--1.添加tomcat插件 --><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version><configuration><port>8080</port><path>/</path></configuration></plugin><!--2.添加Spring Boot 的打包插件 --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.1.10.RELEASE</version><configuration><fork>true</fork></configuration></plugin></plugins></build>

【2.添加实体类Score】

package com.jr.entry;
​
import lombok.Data;
import java.io.Serializable;
​
@Data
public class Score implements Serializable {private String name;private Double score;
}

注意:实体类Score一定要实现Serializable接口,否则会报错

【3.添加ScoreService接口】

package com.jr.service;
​
import com.jr.entry.Score;
import java.util.List;
​
public interface ScoreService {
​public List<Score> getinfo();
​
}

【4.添加工具类Result】

package com.jr.util;
​
import lombok.Data;
import java.util.HashMap;
import java.util.Map;
​
@Data
public class Result {
​private Integer code;private String message;private Map<String, Object> map = new HashMap<>();
​private Result() {}
​public static Result ok() {Result r = new Result();r.setCode(ResultCode.SUCCESS.getCode());r.setMessage(ResultCode.SUCCESS.getMessage());return r;}
​public static Result error() {Result r = new Result();r.setCode(ResultCode.ERROR.getCode());r.setMessage(ResultCode.ERROR.getMessage());return r;}
​public Result put(String key, Object value) {map.put(key, value);return this;}
​public Object get(String key) {return map.get(key);}
}

【5.添加枚举ResultCode】

package com.jr.util;
​
public enum ResultCode {SUCCESS(0, "请求成功"),ERROR(1, "请求失败"),;
​private int code;private String message;
​ResultCode(int code, String message) {this.code = code;this.message = message;}
​public int getCode() {return code;}
​public String getMessage() {return message;}
}

3、准备Consumer工程

【1.添加依赖】

    
 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.7.RELEASE</version></parent>
​<properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.6.13</spring-boot.version><jwt.version>0.7.0</jwt.version><fastjson.version>1.2.60</fastjson.version><spring-cloud-alibaba.version>2.0.3.RELEASE</spring-cloud-alibaba.version><spring-cloud.version>Finchley.SR2</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>compile</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--json--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>${fastjson.version}</version><scope>compile</scope></dependency><dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-data-redis</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><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-alibaba-nacos-config</artifactId></dependency><!--引入api工程依赖 --><dependency><groupId>com.jr</groupId><artifactId>dubboapi</artifactId><version>1.0-SNAPSHOT</version></dependency><!--引入dubbo依赖 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-dubbo</artifactId></dependency>
​</dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>
​<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><classifier>exec</classifier></configuration></plugin></plugins></build>

【2.创建SessionConfig配置类】

package com.jr.config;
​
@Configuration
public class SessionConfig {
​@Beanpublic CookieSerializer cookieSerializer() {DefaultCookieSerializer serializer = new DefaultCookieSerializer();serializer.setCookieName("JSESSIONID");serializer.setCookiePath("/");serializer.setDomainNamePattern("^.+?\\.(\\w+\\.[a-z]+)$");return serializer;}
​@Beanpublic RedisSerializer<Object> redisSerializer() {return new GenericJackson2JsonRedisSerializer();}
}

【3.创建控制器UserController】

package com.jr.controller;
​
@RestController
@RequestMapping("/user")
public class UserController {
​@Autowiredprivate UserService userService;
​@GetMappingpublic Result getinfo(){User user = userService.getinfo();return Result.ok().put("data",user);}
}

【4.创建实体类User】

package com.jr.entry;
​
@Component
@Data
public class User {
​private String id;private String name;private String password;private List<Score> scoreList;
}

【5.创建UserService接口】

package com.jr.service;
​
public interface UserService {
​public User getinfo();
}

【6.创建UserServiceImpl实现类】

package com.jr.service.impl;
​
@Service
public class UserServiceImpl implements UserService {
​@Referenceprivate ScoreService scoreService;
​@Overridepublic User getinfo() {User user=new User();user.setId("111");user.setName("zhangsan");user.setPassword("zs123");List<Score> list=scoreService.getinfo();user.setScoreList(list);return user;}
}

注意:@Service主键要用dubbo下面的,不能用Spring的注解。

【7.创建启动类】

package com.jr;
​
@SpringBootApplication
@EnableRedisHttpSession
public class SpringBootMain {public static void main(String[] args) {SpringApplication.run(SpringBootMain.class,args);}
}

【8.编写application.properties配置文件】

spring.application.name=dubbocon

【9.编写application.yml配置文件】

server:port: 100
​
spring:session:store-type: redis
​
dubbo:registry:address: nacos://192.168.43.8:8848cloud:subscribed-services: dubbopro   #是p工程的服务名consumer:check: false

【10.编写bootstrap.yml配置文件】

spring:cloud:nacos:discovery:server-addr: 192.168.43.8:8848config:server-addr: 192.168.43.8:8848file-extension: yamlnamespace: d2a5ce42-8836-4dc4-89e0-9f8620b82327shared-configs:- data-id: dz14redissession.yamlgroup: DEFAULT_GROUPinetutils:preferred-networks: 192.168.56
​

4、准备Provider工程

【1.添加依赖】同上

【2.创建SessionConfig配置类】同上

【3.创建ScoreServiceImpl接口实现类】

package com.jr.service.impl;
​
@Service
public class ScoreServiceImpl implements ScoreService {@Overridepublic List<Score> getinfo() {List<Score> list=new ArrayList<>();for(int i=0;i<3;i++){Score score=new Score();score.setName("admin");score.setScore(Math.random()*100);list.add(score);}return list;}
}

【4.创建启动类】同上

【5.编写application.properties配置文件】

spring.application.name=dubbopro

【6.编写application.yml配置文件】

server:port: 200
​
spring:session:store-type: redis
​
dubbo:scan:base-packages: com.jr.service  #指定把哪一个包下面的Servlet交给dubbo去管理。protocol:name: dubboport: -1registry:address: nacos://192.168.43.8:8848cloud:subscribed-services: ""

【7.编写bootstrap.yml配置文件】同上

注意:

启动时,要先启动consumer工程,后启动provider工程,避免出现启动失败的错误。


http://www.ppmy.cn/news/1532795.html

相关文章

php email功能实现:详细步骤与配置技巧?

php email发送功能详细教程&#xff1f;如何使用php email服务&#xff1f; 无论是用户注册、密码重置&#xff0c;还是订单确认&#xff0c;电子邮件都是与用户沟通的重要手段。AokSend将详细介绍如何实现php email功能&#xff0c;并提供一些配置技巧&#xff0c;帮助你更好…

联邦学习(三只决策和大数据分析)(学习笔记)

联邦学习模型按照数据重叠形式分成了三类&#xff0c;分别是横向联邦学习、纵向联邦学习和联邦迁移学习。 横向联邦学习模型针对特征一致但ID不一致的数据&#xff1b; 纵向联邦学习模型针对ID一致但特征不一致的数据&#xff1b; 联邦迁移学习模型针对ID和特征都不一致的数据。…

对比学习训练是如何进行的

对比学习&#xff08;Contrastive Learning&#xff09;是一种自监督学习的方法&#xff0c;旨在通过拉近相似样本的表示、拉远不相似样本的表示来学习特征表示。在训练过程中&#xff0c;模型并不依赖标签&#xff0c;而是通过样本之间的相似性进行学习。以下是对比学习的基本…

基于ESP8266—AT指令连接阿里云+MQTT透传数据(3)

MQTT_RX设备为接收(订阅)数据的Topic,使用ESP8266通过AT指令实现。 首先需要串口通信软件,如 SSCOM、PuTTY、SecureCRT 等串口调试工具,功能丰富,支持常见的串口调试功能,用于发送AT指令。 以下是ESP8266通过AT指令连接阿里云MQTT服务的步骤: 1、初始化WiFi 发送下面…

RabbitMQ高级特性-持久性

对于RabbitMQ的可靠性机制 引入&#xff1a;当RabbitMQ服务停掉以后, ⽣产者发送的消息不丢失呢. 默认情况下, RabbitMQ 退出或者由于某种原因崩溃时, 会忽视队列和消息, 除⾮告知他不要这么做。 RabbitMQ的持久化分为三个部分:交换器的持久化、队列的持久化和消息的持久化。…

AI换脸技术新纪元:直播与视频创作的新利器

在数字媒体时代&#xff0c;实时面部交换技术正变得越来越流行。它不仅为视频创作者提供了新的表达方式&#xff0c;也为直播行业带来了革命性的变化。以下是一些目前市场上领先的实时面部交换软件&#xff1a; &#x1f31f; FaceFusion FaceFusion 是一款功能强大的实时面部…

实用工具推荐---- PDF 转换

直接上链接&#xff1a;爱PDF |面向 PDF 爱好者的在线 PDF 工具 (ilovepdf.com) 主要功能如下&#xff1a; 全免费&#xff01;&#xff01;&#xff01;&#xff01;

Spring Boot与Spring Integration:集成模式的现代化实现

在现代软件开发中&#xff0c;集成模式是实现微服务架构和企业服务总线&#xff08;ESB&#xff09;的关键技术。Spring Boot与Spring Integration的结合&#xff0c;为开发者提供了一种高效、现代化的方式来实现这些集成模式。以下是关于Spring Boot与Spring Integration集成模…