Apache Dubbo 框架的使用(三)

Springboot_Dubbo_Zookeeper整合

1.创建一个空工程(Empty Project)

在这里插入图片描述
项目名称:Springboot_Dubbo_Zookeeper_Demo1:
在这里插入图片描述

2.新建boot-interface-all模块(包括实体类,业务层接口总和)

在这里插入图片描述
在这里插入图片描述
项目结构:
在这里插入图片描述
相关代码:

package com.kd.opt.entity;

import java.io.Serializable;

/**
 * 实体类——食物信息(模拟User与Food为一对多的关系)
 *
 * @author 小辰哥哥
 */
public class Food implements Serializable {

  // 食物编号
  private String foodId;

  // 食物名称
  private String foodName;

  // 无参构造
  public Food() {
  }

  // 有参构造
  public Food(String foodId, String foodName) {
    this.foodId = foodId;
    this.foodName = foodName;
  }

  // get和set方法进行封装
  public String getFoodId() {
    return foodId;
  }

  public void setFoodId(String foodId) {
    this.foodId = foodId;
  }

  public String getFoodName() {
    return foodName;
  }

  public void setFoodName(String foodName) {
    this.foodName = foodName;
  }

  // 重新toString方法
  @Override
  public String toString() {
    return "Food{" +
        "foodId='" + foodId + '\'' +
        ", foodName='" + foodName + '\'' +
        '}';
  }
}
package com.kd.opt.entity;

import java.io.Serializable;
import java.util.List;

/**
 * 实体类——用户信息(模拟User与Food为一对多的关系)
 *
 * @author 小辰哥哥
 */
public class User implements Serializable {

  // 用户编号
  private String userId;

  // 用户姓名
  private String userName;

  // 用户年龄
  private String userAge;

  // 食物列表信息
  private List<Food> foodList;

  // 无参构造
  public User() {
  }

  // 有参构造
  public User(String userId, String userName, String userAge, List<Food> foodList) {
    this.userId = userId;
    this.userName = userName;
    this.userAge = userAge;
    this.foodList = foodList;
  }

  // get和set方法进行封装
  public String getUserId() {
    return userId;
  }

  public void setUserId(String userId) {
    this.userId = userId;
  }

  public String getUserName() {
    return userName;
  }

  public void setUserName(String userName) {
    this.userName = userName;
  }

  public String getUserAge() {
    return userAge;
  }

  public void setUserAge(String userAge) {
    this.userAge = userAge;
  }

  public List<Food> getFoodList() {
    return foodList;
  }

  public void setFoodList(List<Food> foodList) {
    this.foodList = foodList;
  }

  // 重写toString方法
  @Override
  public String toString() {
    return "User{" +
        "userId='" + userId + '\'' +
        ", userName='" + userName + '\'' +
        ", userAge='" + userAge + '\'' +
        ", foodList=" + foodList +
        '}';
  }
}
public interface FoodService {
  /**
   * 获取全部食物信息
   *
   * @author 小辰哥哥
   * @return
   */
  List<Food> getFoodAll();
}
public interface UserService {
  /**
   * 获取用户相关信息
   *
   * @author 小辰哥哥
   * @return
   */
  User getUserAndFood();
}

3.新建boot-provider模块(生产者)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
引入dubbo依赖:

<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>0.2.0</version>
</dependency>

引入总接口(boot-interface-all)依赖:

<dependency>
   <groupId>com.kd.opt</groupId>
   <artifactId>boot-interface-all</artifactId>
   <version>1.0-SNAPSHOT</version>
</dependency>

项目结构:
在这里插入图片描述
yml相关配置(最基础):

# 日志级别设置
logging:
  level:
    root: info # 最基础的日志输出级别
    com.kd.opt: debug  # 指定包下的日志输出级别
    org.springframework.web: debug # 指定类下的日志输出级别

# 端口号和上下文路径
server:
  port: 8088
  servlet:
    context-path: /boot-provider

# 关于Dubbo相关的配置
# 1:指定当前服务/应用的名字(同样的服务名字相同,不要和别的服务同名)
dubbo:
  application:
    name: boot-provider

# 2:指定注册中心的位置
  registry:
    address: 127.0.0.1:2181
    protocol: zookeeper

# 3:指定通信规则(通信协议?通信端口)
  protocol:
    name: dubbo
    port: 20880

# 4:声明需要暴露的服务接口 (ref:指向服务的真正的实现对象)
# ref:指向服务的真正的实现对象(服务的实现)------------在FoodServiceImpl实现类加入注解@Service(注意是com.alibaba.dubbo包下面的)

# 5:配置监控中心
  monitor:
    protocol: registry

业务层相关代码:

package com.kd.opt.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.kd.opt.entity.Food;
import com.kd.opt.service.FoodService;
import org.springframework.stereotype.Component;

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

/**
 * 实现FoodService接口
 *
 * @author 小辰哥哥
 */

// 暴露服务(注意是com.alibaba.dubbo包下面的)
@Service

// 之前的@Service(spring家的)可以用@Component代替
@Component
public class FoodServiceImpl implements FoodService {
  @Override
  public List<Food> getFoodAll() {

    // 创建一个ArrayList集合模拟数据库
    List<Food> foodList = new ArrayList<>();
    foodList.add(new Food("1","蓝色妖姬"));
    foodList.add(new Food("2","骨肉相连"));
    foodList.add(new Food("3","螺蛳粉"));
    return foodList;
  }
}

启动类相关代码:

package com.kd.opt;

import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication

// 开启基于注解的dubbo功能
@EnableDubbo
public class BootProviderApplication {

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

开始启动,注意提前开始Zookeeper服务:
在这里插入图片描述

4.新建boot-consumer模块(消费者)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
引入dubbo依赖:

<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>0.2.0</version>
</dependency>

引入总接口(boot-interface-all)依赖:

<dependency>
   <groupId>com.kd.opt</groupId>
   <artifactId>boot-interface-all</artifactId>
   <version>1.0-SNAPSHOT</version>
</dependency>

项目结构:
在这里插入图片描述
yml相关配置(最基础):

# 日志级别设置
logging:
  level:
    root: info # 最基础的日志输出级别
    com.kd.opt: debug  # 指定包下的日志输出级别
    org.springframework.web: debug # 指定类下的日志输出级别

# 关于Dubbo相关的配置
# 1:指定当前服务/应用的名字(同样的服务名字相同,不要和别的服务同名)
dubbo:
  application:
    name: boot-consumer

# 2:指定注册中心的位置
  registry:
    protocol: zookeeper
    address: 127.0.0.1:2181

# 3:声明需要调用的远程服务的接口:生成远程服务代理-----在实现类依赖注入使用@Reference注解

# 4:配置监控中心
  monitor:
    protocol: registry

业务层相关代码:

package com.kd.opt.service.impl;

import com.alibaba.dubbo.config.annotation.Reference;
import com.kd.opt.entity.Food;
import com.kd.opt.entity.User;
import com.kd.opt.service.FoodService;
import com.kd.opt.service.UserService;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 实现UserService接口
 *
 * @author 小辰哥哥
 */
// org.springframework.stereotype.Service(Spring家的)
@Service
public class UserServiceImpl implements UserService {

  // 引入食物业务层(依赖注入)
  // 不在使用@Autowired注解
  @Reference
  private FoodService foodService;

  @Override
  public User getUserAndFood() {

    // 获取食物相关信息
    List<Food> foodList = foodService.getFoodAll();

    // 创建一个用户对象
    User user = new User();
    user.setUserId("001");
    user.setUserName("小辰哥哥");
    user.setUserAge("18");
    user.setFoodList(foodList);

    return user;
  }
}

控制器相关代码:

package com.kd.opt.controller;

import com.kd.opt.entity.User;
import com.kd.opt.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {
  // 引入用户业务层(依赖注入)
  @Autowired
  private UserService userService;

  @RequestMapping(value = "/getUserAndFood",method = RequestMethod.GET)
  public User getUserAndFood(){
    return userService.getUserAndFood();
  }
}

启动类相关代码:

package com.kd.opt;
import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
// 开启基于注解的dubbo功能
@EnableDubbo
public class BootConsumerApplication {

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

开始启动,注意提前开始Zookeeper服务,生产者服务:
在这里插入图片描述

5.开始测试

查看Dubbo管理控制台(具体安装启动,详见Apache Dubbo 框架的使用(二)):
在这里插入图片描述
在这里插入图片描述
查看Dubbo监控中心(具体安装启动,详见Apache Dubbo 框架的使用(二)):

在这里插入图片描述

在这里插入图片描述

访问控制器映射地址:
在这里插入图片描述


总结

每天一个提升小技巧!!!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小辰哥哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值