dubbo使用springboot maven多模块项目框架 基于zookeeper注册中心
zookeeper简单理解为分布式文件系统,主要是分布式节点系统(znode),类似电脑上的多层文件夹系统,znode可以存储数据,可以通过监听节点的变化来实现分布式应用,分布式框架,分布式锁,等等安装完成zookeeper后,建立maven 项目完成dubbo分布式微服务框架项目:maven项目,两个模块,一个provider提供服务(注意dubbo的@Service使用),一个cons...
zookeeper简单理解为分布式文件系统,主要是分布式节点系统(znode),类似电脑上的多层文件夹系统,znode可以存储数据,可以通过监听节点的变化来实现分布式应用,分布式框架,分布式锁,等等
安装完成zookeeper后,建立maven 项目完成dubbo分布式微服务框架
项目:maven项目,两个模块,一个provider提供服务(注意dubbo的@Service使用),一个consumer消费服务(注意dubbo的@Reference使用)
pom.xml 项目根配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.dddd</groupId>
<artifactId>dubbo</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>provider</module>
<module>consumer</module>
</modules>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.1.RELEASE</version>
<relativePath/>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.dubbo.springboot</groupId>
<artifactId>spring-boot-starter-dubbo</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.6</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</dependencyManagement>
</project>
provider模块
pom.xml
<dependencies>
<dependency>
<groupId>io.dubbo.springboot</groupId>
<artifactId>spring-boot-starter-dubbo</artifactId>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</dependency>
</dependencies>
application.properties
server.port=8088
## Dubbo 服务提供者配置
#--服务名称
spring.dubbo.application.name=provider
#-- 注册中心地址
spring.dubbo.registry.address=zookeeper://192.168.163.132:2181
#-- dubbo 协议
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880
#--声明需要暴露的服务接口
spring.dubbo.scan=com.dubbo
一个接口类,与服务类(实现接口)
UserService.java
package com.dubbo.provider.service;
public interface UserService {
String getUser(int id);
}
UserServiceImpl.java
package com.dubbo.provider.service;
import com.alibaba.dubbo.config.annotation.Service;
@Service
public class UserServiceImpl implements UserService{
@Override
public String getUser(int id)
{
return id+" user";
}
}
springboot启动类
ProviderApplication.java
package com.dubbo.provider;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class,args);
}
}
consumer模块
pom.xml 比provider模块多了web访问
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>io.dubbo.springboot</groupId>
<artifactId>spring-boot-starter-dubbo</artifactId>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</dependency>
application.properties 除了springboot应用监听端口与provide不同
server.port=8089
## Dubbo 服务消费者配置
#--服务名称
spring.dubbo.application.name=consumer
#-- 注册中心地址
spring.dubbo.registry.address=zookeeper://192.168.163.132:2181
#-- dubbo 协议
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880
#--声明需要暴露的服务接口
spring.dubbo.scan=com.dubbo
使用provider模块的接口(复制,注意类全路径与provider一致),和接口(服务)调用的服务类
UserService.java
package com.dubbo.provider.service;
public interface UserService {
String getUser(int id);
}
UserConsumer.java
package com.dubbo.consumer.service;
import com.alibaba.dubbo.config.annotation.Reference;
import com.dubbo.provider.service.UserService;
import org.springframework.stereotype.Component;
@Component
public class UserConsumer {
@Reference(interfaceClass = UserService.class)
private UserService userService;
public String consumer(int id)
{
return userService.getUser(id);
}
}
UserController.java 控制器访问
package com.dubbo.consumer.controller;
import com.dubbo.consumer.service.UserConsumer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@Autowired
private UserConsumer userConsumer;
@RequestMapping("/get")
public Object saveUser(@RequestParam int id) {
return userConsumer.consumer(id);
}
}
springboot启动类
ConsumerApplication.java
package com.dubbo.consumer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class,args);
}
}
访问地址:get 127.0.0.1:8089/get?id=3 返回3 user
8089是consumer端口
8088是provider服务端口
application.properties配置中的spring.dubbo.scan需要能扫描到【接口】与【使用接口】的类(provider(接口与实现接口)与consumer(接口与使用接口)中)
注意provider与consumer中的接口必须【全路径包名】一致,因为zookeeper是分布式节点系统,提供服务是以provider的接口的全路径(com.dubbo.provider.service.UserService)设置的节点名,如果consumer的接口路径不一致就会找不到提供的服务
provider与consumer的 springboot启动中会有连接zookeeper的日志,如果没有说明不对,如果报错看看具体报错原因
更多推荐
所有评论(0)