0
点赞
收藏
分享

微信扫一扫

Dubbo02【搭建provider和consumer】

  本文来给大家介绍下基于Spring配置的方式来搭建dubbo中的服务提供端和消费端

provider和consumer的搭建

1.项目结构

  项目采用Maven聚合功能,共有三个模块,结构如下:
Dubbo02【搭建provider和consumer】_zookeeper
dubbo-common
Dubbo02【搭建provider和consumer】_zookeeper_02
dubbo-consumer
Dubbo02【搭建provider和consumer】_xml_03
dubbo-provider
Dubbo02【搭建provider和consumer】_xml_04

模块说明

模块

说明

dubbo-common

公共模块,用来存放服务提供者和消费则所需的所有的接口和pojo类,实现代码的复用,dubbo-provider和dubbo-consumer都需要引入这个包,所以我们需要先 mvn clean install

dubbo-provider

服务提供者

dubbo-consumer

服务消费者

2.具体实现

2.1dubbo-common

person.java

package com.bobo.pojo;

public class Person {

private Integer id;

private String name;

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getName() {
return name;
}

@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + "]";
}

public void setName(String name) {
this.name = name;
}
}

UserService.java
接口中定义

package com.bobo.service;

import com.bobo.pojo.Person;

public interface UserService {

String sayHello(String name);

String testPojo(Person person);
}

2.2 provider

pom.xml
引入相关的依赖

<dependencies>
<!-- 依赖公共模块 -->
<dependency>
<groupId>com.bobo</groupId>
<artifactId>dubbo-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- 引入Spring的依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.21.RELEASE</version>
</dependency>
<!-- 引入日志的依赖 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
<!-- 引入dubbo框架(服务端、客户端通用) -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
<exclusions>
<exclusion>
<artifactId>spring</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- 因为dubbo服务端需要注册服务到zk中,因此依赖zkClient包 -->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
</dependencies>

Spring配置文件
在spring配置文件中设置dubbo的相关信息

<?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:context="http://www.springframework.org/schema/context"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="dubboProvider" />

<!-- 使用zookeeper注册中心暴露服务地址 -->
<dubbo:registry protocol="zookeeper"
address="192.168.88.171:2181,192.168.88.172:2181,192.168.88.173:2181" />

<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />
<!-- 启用monitor模块 -->
<dubbo:monitor protocol="registry" />

<bean id="userService" class="com.bobo.service.UserServiceImpl" />

<!-- 声明需要暴露的服务接口 -->
<dubbo:service interface="com.bobo.service.UserService" ref="userService"
group="dubbo" version="1.0.0" timeout="3000"/>
</beans>

zookeeper的配置方式如下:

<dubbo:registry address="zookeeper://192.168.88.171:2181" />

或者

<dubbo:registry protocol="zookeeper" address="192.168.88.171:2181" />

如果有多个ip地址

<dubbo:registry address="zookeeper://192.168.88.171:2181?backup=192.168.88.172:2181,192.168.88.173:2181"  />

或者

<dubbo:registry protocol="zookeeper" 
address="192.168.88.171:2181,192.168.88.172:2181,192.168.88.173:2181" />

另外你还可以在同一个 Zookeeper 服务器上划分多个分组

<dubbo:registry id="registry1" protocol="zookeeper" address="10.20.153.10:2181" gr
oup="registry1" />
<dubbo:registry id="registry2" protocol="zookeeper" address="10.20.153.10:2181" gro
up="registry2" />

在同一个 Zookeeper 服务器上划分了两个分组,也就是会有两颗树目录,树根分别为 registry1 和 registry2。

UserServiceImpl
接口实现类

public class UserServiceImpl implements UserService {

@Override
public String sayHello(String name) {
//让当前当前线程休眠2s
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("-------"+name);
return name+"----000";
}

@Override
public String testPojo(Person person) {
System.out.println(person.getName()+"/t"+person.getId());
return "你好啊...";
}

}

log4j.properties

log4j.rootLogger=INFO,A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout

测试启动

package com.bobo.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {

public static void main(String[] args) throws InterruptedException {
ApplicationContext ac =
new ClassPathXmlApplicationContext("applicationContext.xml");
//挂起当前线程,如果没有改行代码,服务提供者进程会消亡,服务消费者就发现不了提供者了
Thread.currentThread().join();
}
}

Dubbo02【搭建provider和consumer】_xml_05
服务已经成功注册到了zookeeper中
Dubbo02【搭建provider和consumer】_dubbo_06

2.3 consumer

pom.xml
引入相关的依赖

<dependencies>
<!-- 依赖公共模块 -->
<dependency>
<groupId>com.bobo</groupId>
<artifactId>dubbo-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- 依赖Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.21.RELEASE</version>
</dependency>
<!-- log4j的依赖 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
<!-- 引入dubbo框架(服务端、客户端通用) -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
<exclusions>
<exclusion>
<artifactId>spring</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- 因为dubbo服务端需要注册服务到zk中,因此依赖zkClient包 -->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
</dependencies>

Spring配置文件

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

<!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
<dubbo:application name="dubboConsumer" />
<!-- 使用zookeeper注册中心暴露发现服务地址 -->
<dubbo:registry protocol="zookeeper"
address="192.168.88.171:2181,192.168.88.172:2181,192.168.88.173:2181" />
<!-- 启动monitor-->
<dubbo:monitor protocol="registry" />
<!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
<dubbo:reference id="userService" interface="com.bobo.service.UserService"
group="dubbo" version="1.0.0" timeout="3000"/>
</beans>

log4j.properties

log4j.rootLogger=INFO,A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout

TsetConsumer.java

package com.bobo.test;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.bobo.service.UserService;

public class TestConsumer {

public static void main(String[] args) {
ClassPathXmlApplicationContext ac =
new ClassPathXmlApplicationContext("applicationContext.xml");
final UserService demoService = (UserService) ac.getBean("userService");
System.out.println(demoService.sayHello("哈哈哈"));
}
}

测试输出
Dubbo02【搭建provider和consumer】_zookeeper_07

说明服务消费者已经正常调用了服务提供方的服务了!


举报

相关推荐

0 条评论