微服务dubbo解析部署使用全流程

目录

1、简介

2、与OpenFeign的区别

3、应用

0、启动nacos和redis

1、准备工程

2、编写api工程

【1.添加依赖】

【2.添加实体类Score】

【3.添加ScoreService接口】

【4.添加枚举ResultCode】

【5.添加工具类Result】

3、准备Consumer工程

【1.添加依赖】

【2.创建SessionConfig配置类】

【3.创建实体类User】

【4.创建UserService接口】

【6.创建UserServiceImpl实现类】

【7.创建控制器UserController】

【7.创建启动类】

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

​编辑

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

​编辑

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

4、准备Provider工程

注意:

注意:


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.添加枚举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;
    }
}

【5.添加工具类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);
    }
}

进行打包

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;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.session.web.http.CookieSerializer;
import org.springframework.session.web.http.DefaultCookieSerializer;

@Configuration
public class SessionConfig {

    @Bean
    public CookieSerializer cookieSerializer() {
        DefaultCookieSerializer serializer = new DefaultCookieSerializer();
        serializer.setCookieName("JSESSIONID");
        serializer.setCookiePath("/");
        serializer.setDomainNamePattern("^.+?\\.(\\w+\\.[a-z]+)$");
        return serializer;
    }

    @Bean
    public RedisSerializer<Object> redisSerializer() {
        return new GenericJackson2JsonRedisSerializer();
    }
}

【3.创建实体类User】

package com.jr.entry;

import lombok.Data;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
@Data
public class User {

    private String id;
    private String name;
    private String password;
    private List<Score> scoreList;
}

【4.创建UserService接口】

package com.jr.service;

import com.jr.entry.User;

public interface UserService {

    public User getinfo();
}

【6.创建UserServiceImpl实现类】

package com.jr.service.impl;
import com.jr.entry.Score;
import com.jr.entry.User;
import com.jr.service.ScoreService;
import com.jr.service.UserService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;


import java.util.List;

@Service   //寻找   dubbo包下
public class UserServiceImpl implements UserService {

    @Reference   //这里是api里的接口      关联
    private ScoreService scoreService;    //通道

    @Override
    public 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;
    }
}

【7.创建控制器UserController】

package com.jr.controller;
import com.jr.entry.User;
import com.jr.service.UserService;
import com.jr.util.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping
    public Result getinfo(){
        User user = userService.getinfo();
        return Result.ok().put("data",user);
    }
}

【7.创建启动类】

package com.jr;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;

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

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

给当前工程取的名,用于在nacos中显示和管理。

spring.application.name=dubbocon

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

server:
  port: 100

spring:
  session:
    store-type: redis

dubbo:
  registry:
    address: nacos://192.168.146.128:8848     #nacos的地址
  cloud:
    subscribed-services: dubbopro   #是p工程的服务名    #nacos注册要访问的项目名
  consumer:
    check: false

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

微服务SpringSession解析部署使用全流程-CSDN博客

详细内容查看微服务nacos解析部署使用全流程-CSDN博客

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.146.128:8848
      config:
        server-addr: 192.168.146.128:8848
        file-extension: yaml
        namespace: 516a199f-c6b4-493c-9c52-0629482aabc2
        shared-configs:
          - data-id: dubbo.yaml
            group: DEFAULT_GROUP
    inetutils:
      preferred-networks: 192.168.146

4、准备Provider工程

【1.添加依赖】同上

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

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

注意:

@Service 是apache.dubbo. 包下的,不是springframework包下。

package com.jr.service.impl;

import com.jr.entry.Score;
import com.jr.service.ScoreService;
import org.apache.dubbo.config.annotation.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class ScoreServiceImpl implements ScoreService {
    @Override
    public 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: dubbo
    port: -1
  registry:
    address: nacos://192.168.146.128:8848
  cloud:
    subscribed-services: ""

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

注意:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值