5使用Duboo远程连接

使用Duboo远程连接

Spring连接使用步骤

  1. 导入依赖
  2. 服务提供者,向注册中心注册服务
  3. 服务消费者,向注册中心调用服务
  4. 可以使用监控进行查看服务

准备工作

首先Duboo是在多个服务之间建立联系,从而通过注册中心来进行远程调用

Duboo可以通过面向接口的形式进行远程调用

两方想要相互调用要存在共同的接口

(因为之后多个服务之间出现多个相同的接口,如果每次都写入,会显得特别繁琐,所以这里我们将会使用Maven的多模块开发)

查看项目结构

在这里插入图片描述

在这里插入图片描述

使用Maven的多模块开发,父工程来提供共同的jar文件,author子工程来提供公用的接口

在使用之前要打开Duboo的监控器便于之后的观察

开启zookeeper,开启监控

在这里插入图片描述

开启监控

在这里插入图片描述

导入依赖

<!-- 引入dubbo -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>dubbo</artifactId>
			<version>2.6.2</version>
		</dependency>

<!-- 由于我们使用zookeeper作为注册中心,所以需要操作zookeeper
dubbo 2.6以前的版本引入zkclient操作zookeeper 
dubbo 2.6及以后的版本引入curator操作zookeeper
下面两个zk客户端根据dubbo版本2选1即可
-->
		<dependency>
			<groupId>com.101tec</groupId>
			<artifactId>zkclient</artifactId>
			<version>0.10</version>
		</dependency>
		<!-- curator-framework -->
		<dependency>
			<groupId>org.apache.curator</groupId>
			<artifactId>curator-framework</artifactId>
			<version>2.12.0</version>
		</dependency>


我用的是(因为版本的缘故)
 <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>dubbo</artifactId>
      <version>2.6.2</version>
    </dependency>

    <dependency>
      <groupId>org.apache.curator</groupId>
      <artifactId>curator-recipes</artifactId>
      <version>4.0.1</version>
    </dependency>


编写服务提供者的代码

服务提供者的来完成接口的实现

package cn.Dao;
public class UserDaoImple implements UserDao  {
    
    
    
//    这里因为Maven的多模块开发
//    所以集成接口,重写方法,这里的方法做一个返回值处理
    public String show() {
    
    
        return "实现在提供者中";
    }
}

查看Spring的进行将提供者服务开启主程序类

public class Client {
    
    
    public static void main(String[] args) {
    
    

//        加载配置文件
//        配置文件中配置了关于Duboo的服务
        ClassPathXmlApplicationContext context =
                new ClassPathXmlApplicationContext("provider.xml");
        
        context.start();

//        为了防止执行程序之后结束,这里写一个阻塞,程序运行到这里暂时不结束
//                这样就可以看到监控器中的展示服务提供者
        try {
    
    
            System.in.read();
        } catch (IOException e) {
    
    
            e.printStackTrace();
        }

    }
}

看一看Spring服务提供者的配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://dubbo.apache.org/schema/dubbo
       http://dubbo.apache.org/schema/dubbo/dubbo.xsd">

    <!--指定服务名,名字可以进行自定义-->
    <dubbo:application name="gmall-user"></dubbo:application>

    <!--指定注册中心的地址  这里指定zookeeper的位置和可以在cmd上看得到 -->
    <dubbo:registry address="zookeeper://192.168.159.1:2181"/>
    <!--使用dubbo协议,将服务暴露在20880端口  -->
    <dubbo:protocol name="dubbo" port="20880" />
    
    <!--下面的两个用来指定服务提供者提供的服务-->
    <!-- 指定需要暴露的服务 -->
    <!--这里的ref引入表示接口的实现类在哪里-->
    <dubbo:service interface="cn.Dao.UserDao" ref="UserDaoImple" />

    <bean id="UserDaoImple" class="cn.Dao.UserDaoImple"/>

</beans>

看一看运行结果

在监控器中可以看到服务提供者+1

在这里插入图片描述

编写服务消费者部分代码

  1. 首先编写Spring的配置文件用来建立连接
  2. 创建需要使用服务提供者部分的代码。进行调用服务提供者功能
  3. 创建主程序类进行调用
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://dubbo.apache.org/schema/dubbo" xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://dubbo.apache.org/schema/dubbo
       http://dubbo.apache.org/schema/dubbo/dubbo.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">
    <!--Spring的包扫描-->
    <context:component-scan base-package="cn"/>
    <!--添加 自定义服务名-->
    <dubbo:application name="consumerweb"></dubbo:application>
    
    <!-- 指定注册中心地址 因为服务提供者提供了地址,服务消费者指定连接-->
    <dubbo:registry address="zookeeper://192.168.159.1:2181" />
    
    <!--引入接口作为连接-->
    <!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
    <dubbo:reference id="userService" interface="cn.Dao.UserDao"></dubbo:reference>

</beans>

编写服务调用者类

package cn.Dao;

import com.alibaba.dubbo.config.annotation.Reference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;


//这里使用SpringIOC进行处理
@Service("userdaocall")
public class UserDaoCall {
    
    
    
//    正常使用Spring注解进行引入接口
//    因为配置的原因,调用接口会调用服务提供者的代码
    @Autowired
    @Reference
    private  UserDao userService;

//    和以往一样正常的进行调用
    public void Consumershow(){
    
    
        System.out.println(userService.show());
    }
}

主程序类

package cn.Dao;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.io.IOException;


public class Client {
    
    


    public static void main(String[] args) {
    
    

//        加载Spring配置
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("consumer.xml");
        context.start();

//        通过IOC创建出调用者对象
        UserDaoCall userdaocall = context.getBean("userdaocall", UserDaoCall.class);
        userdaocall.Consumershow();

        
        System.out.println("我是消费者");
        
//        使用阻塞,保持程序正常执行,才可以看得到监控器内容
        try {
    
    
            System.in.read();
        } catch (IOException e) {
    
    
            e.printStackTrace();
        }
    }

}

观察结果

在这里插入图片描述

监控器

在这里插入图片描述

使用SpringBoot进行操作

  1. 引入依赖
  2. 编写配置
  3. 编写代码
  4. 运行主程序类

准备工作

创建共同的接口,SpringBoot本身就是Spring编写的,Spring的整体使用和搭建要比Spring简便很多

导入依赖

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

注意版本兼容问题

在这里插入图片描述

配置文件

  1. application.name就是服务名,不能跟别的dubbo提供端重复
  2. registry.protocol 是指定注册中心协议
  3. registry.address 是注册中心的地址加端口号
  4. protocol.name 是分布式固定是dubbo,不要改。
  5. base-package 注解方式要扫描的包

SpringBoot的配置一般写在Yml或properties中

这里的配置与Spring中配置基本上一致,只是换了一种形式

编写提供者

SpringBoot配置

#这里的配置与Spring中配置基本上一致,只是换了一种形式
#这里不存在暴露服务,因为实际中需要暴漏的服务很多,所以这里一般使用Duboo注解的形式
dubbo.application.name=SpringBootProvider
dubbo.registry.protocol=zookeeper
dubbo.registry.address=192.168.159.1:2181
dubbo.scan.base-package=cn
dubbo.protocol.name=dubbo
duboo.protocol.port=20880

#这里因为端口号被zookeeper等占用,所以改变一下端口号
server.port=8091

实现类

package cn.Dao;


import com.alibaba.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;

//这里的Service使用的是Duboo的
//使用这个注解来暴漏服务
@Service
//因为Service注解避免冲突所以这里使用Spring的Componet注解
@Component
public class UserDaoImple implements UserDao  {
    
    

//    这里因为Maven的多模块开发
//    所以集成接口,重写方法,这里的方法做一个返回值处理
    public String show() {
    
    
        return "实现在提供者中";
    }
}

主程序类

package cn;

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

//使用该注解表示这个SpringBoot开启了Duboo注解及其功能
@EnableDubbo
@SpringBootApplication
public class ProviderMain {
    
    

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

}

编写消费者

和上面基本上步骤是一样的

配置文件

server.port=8092

dubbo.application.name=SpringBootConsumer
dubbo.registry.protocol=zookeeper
dubbo.registry.address=192.168.159.1:2181
dubbo.scan.base-package=cn
dubbo.protocol.name=dubbo


如何写调用类

package cn.Dao;

import com.alibaba.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;


//这里使用SpringIOC进行处理
@Service("userdaocall")
public class UserDaoCall {
    
    

//    和以往不一样的是这里使用Duboo注解进行引入远程连接
    @Reference
    private  UserDao userService;

//    和以往一样正常的进行调用
    public void Consumershow(){
    
    
        System.out.println(userService.show());
    }
}

主程序类

package cn;

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

@EnableDubbo
@SpringBootApplication
public class SpringBootConsumer {
    
    
    public static void main(String[] args) {
    
    
        SpringApplication.run(SpringBootConsumer.class);
    }

}

查看结果

在这里插入图片描述

在这里插入图片描述

bbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

Guess you like

Origin blog.csdn.net/weixin_46401545/article/details/120338302