博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springboot+mybatis+dubbo+aop日志终结篇
阅读量:5044 次
发布时间:2019-06-12

本文共 3294 字,大约阅读时间需要 10 分钟。

之前的几篇文章把dubbo服务层都介绍完毕,本篇文章咱们主要写web层如何调用服务层的方法。文章底部附带源码。

启动服务

服务启动时,会向zk注册自己提供的服务,zk则会记录服务提供者的IP地址以及暴露的接口名称,通过zkCli.cmd 查看树形结构,具体命令如下:

1、ls / 

展示两个目录:dubbo、zookeeper,下面主要看一下dubbo目录

2、ls /dubbo

可以看到注册到dubbo目录下的接口了

3、ls /dubbo/com.example.dubbo.demo.api.DemoApi

服务提供者的具体信息就在providers目录里了

服务消费者-web层

该层依赖api、model层,调用服务提供者对外提供的服务,因此需要配置服务消费者的dubbo信息,主要使用到的dubbo标签如下:

dubbo:application、dubbo:registry、dubbo:reference,具体配置信息如下:

dubbo:registry的配置需要跟服务提供者的配置是一致的。

dubbo:reference配置引用服务的接口名称,详细的属性参考dubbo官方文档。

maven依赖

com.example.dubbo
dubbo-demo-api
0.0.1-SNAPSHOT
com.example.dubbo
dubbo-demo-model
0.0.1-SNAPSHOT

 

服务调用

新建一个DemoService来调用服务提供者对外暴露的方法

package com.example.dubbo.demo.web.service;import com.example.dubbo.demo.api.DemoApi;import dubbo.demo.model.entity.Student;import java.util.List;import org.apache.dubbo.config.annotation.Reference;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;/** * 消费者服务层 * * @author chenlong * @date 2019-03-24 00:49 * @since 1.0.0 */@Servicepublic class DemoService {  private static final Logger LOGGER = LoggerFactory.getLogger(DemoService.class);  @Autowired  private DemoApi demoApi;  public String sayHello(String name) {    return demoApi.sayHello(name);  }    public List
getAll(){ return demoApi.getAll(); } public void add(Student student){ demoApi.add(student); }}

新建一个DemoController来进行测试

package com.example.dubbo.demo.web.controller;import com.example.dubbo.demo.web.service.DemoService;import dubbo.demo.model.entity.Student;import java.util.List;import java.util.Random;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.*;/** * demo 控制器 * * @author chenlong * @date 2019-03-24 00:51 * @since 1.0.0 */@RestController@RequestMapping("/demo")public class DemoController {  private static Logger logger = LoggerFactory.getLogger(DemoController.class);  @Autowired  private DemoService demoService;  /**   * 测试方法,浏览器访问 /demo/index 可以看到响应结果了   *   * @return   */  @RequestMapping(value = "/index", method = RequestMethod.GET)  @ResponseBody  public String index() {    return demoService.sayHello("dubbo");  }    @GetMapping("all")  @ResponseBody  public List
getAll(){ return demoService.getAll(); } @GetMapping("add") @ResponseBody public Student add(){ Student student = new Student(); student.setNum("2019"+ new Random().nextInt()); student.setName("乔治"+new Random().nextInt(100)); student.setAge(new Random().nextInt(10)); student.setSex("m"); demoService.add(student); return student; }}

启动web层,web层会以长连接的方式监听zk,同时会把zk上的服务提供者的信息拿到本地,这样当zk挂掉后不影响消费者的调用,当新的服务注册到zk上时,消费者会同时拿到新的服务信息。

我们在浏览器中输入地址,发现调用成功

代码地址:

 

作者:
出处:
如果喜欢作者的文章,请关注“写代码的猿”订阅号以便第一时间获得最新内容。本文版权归作者所有,欢迎转载

转载于:https://www.cnblogs.com/lc-chenlong/p/10696896.html

你可能感兴趣的文章