Dubbo示例

Dubbo是一款分布式的服务框架;高性能和透明化的RPC远程服务调用方案。
本文采用Dubbo+zookeeper+spring框架整合。

创建项目结构:

1,dubbo_demo ,maven项目(packaging选pom)

2,dubbo-api ,maven模块存放公共接口

3,dubbo-provider,生产者

4,dubbo-consumer,消费者



修改dubbo_demo中pom.xm文件

<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>dubbo_demo</groupId>
	<artifactId>dubbo_demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>pom</packaging>


	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<spring.version>4.2.5.RELEASE</spring.version>
		<!-- log4j日志包版本号 -->
		<slf4j.version>1.7.18</slf4j.version>
		<log4j.version>1.2.17</log4j.version>
	</properties>

	<dependencies>
		<!-- 添加junit4依赖 -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.11</version>
		</dependency>

		<!-- spring相关 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-expression</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>${spring.version}</version>
		</dependency>


		<!-- 添加日志相关jar�? -->
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>${log4j.version}</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${slf4j.version}</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>${slf4j.version}</version>
		</dependency>
		<dependency>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
			<version>1.2</version>
		</dependency>


		<!-- dubbo -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>dubbo</artifactId>
			<version>2.5.3</version>
			<exclusions>
				<exclusion>
					<groupId>org.springframework</groupId>
					<artifactId>spring</artifactId>
				</exclusion>
			</exclusions>
		</dependency>


		<!-- Zookeeper zkclient -->
		<dependency>
			<groupId>com.github.sgroschupf</groupId>
			<artifactId>zkclient</artifactId>
			<version>0.1</version>
		</dependency>

		<!-- zookeeper -->
		<dependency>
			<groupId>org.apache.zookeeper</groupId>
			<artifactId>zookeeper</artifactId>
			<version>3.4.5</version>
		</dependency>


	</dependencies>


	<modules>
		<module>dubbo-api</module>
		<module>dubbo-consumer</module>
		<module>dubbo-provider</module>
	</modules>
</project>

在dubbo-provider模块和dubbo-consumer模块中pom.xml文件中加入

<dependency>
			<groupId>dubbo_demo</groupId>
			<artifactId>dubbo-api</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>

在dubbo-api模块中新建接口类,是生产者和消费者调用的。

package org.dubbo.api;

import java.util.List;

public interface IDemoService {

	public List getPermissions(Long id);

}

在dubbo-provide模块中创建实现类

package org.dubbo.api.impl;

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

import org.dubbo.api.IDemoService;

public class DemoServiceImpl implements IDemoService {

	public List getPermissions(Long id) {
		List demo = new ArrayList();
		demo.add(String.format("Permission_%d", id - 1));
		demo.add(String.format("Permission_%d", id));
		demo.add(String.format("Permission_%d", id + 1));
		return demo;
	}

}

在dubbo-provider模块中创建 provider.xml配置文件,暴露服务接口

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

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

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

	<!-- 用dubbo协议在20880端口暴露服务 -->
	<dubbo:protocol name="dubbo" port="20880" />
	
	<!--具体实现该接口的 bean--> 
    <bean  id="demoService"  class="org.dubbo.api.impl.DemoServiceImpl" /> 
    
     <!-- 声明需要暴露的服务接口 -->  
    <dubbo:service interface="org.dubbo.api.IDemoService"  ref="demoService" protocol="dubbo" />   

</beans>

在dubbo-provider模块中创建 启动服务类

package org.dubbo.api.impl;

import java.io.IOException;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {
	public static void main(String[] args) throws IOException {
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
				new String[] { "provider.xml" });
		context.start();
		System.out.println("服务已经启动...");
		System.in.read();
	}
}

在dubbo-consumer模块中新建consumer.xml位置文件调用接口

<?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://code.alibabatech.com/schema/dubbo"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
	http://code.alibabatech.com/schema/dubbo 
	http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
    
	<dubbo:application name="demo_dubbo" />
	<!--向 zookeeper 订阅 provider 的地址,由 zookeeper 定时推送-->
	<dubbo:registry address="zookeeper://120.79.25.197:2181" />
	<!--使用 dubbo 协议调用定义好的 api.PermissionService 接口-->
	<dubbo:reference id="demoService" interface="org.dubbo.api.IDemoService"/>
    
</beans>

在dubbo-consumer模块新建启动类

package org.dubbo.consumer;

import org.dubbo.api.IDemoService;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {
	public static void main(String[] args) {
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
				"consumer.xml");
		context.start();
		System.out.println("consumer start");
		IDemoService demoService = (IDemoService) context
				.getBean(IDemoService.class);
		System.out.println("consumer");
		System.out.println(demoService.getPermissions(1L));
	}
}

运行生产者启动类和消费者启动类

控制台内容如下,说明调用成功


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Cloud Dubbo是一个基于Spring Cloud构建的企业级分布式服务框架,它简化了Dubbo的集成和配置。Dubbo本身是一个高性能、高可用的RPC(Remote Procedure Call)框架,而Spring Cloud Dubbo则提供了一种更优雅的方式来使用Dubbo。 下面是一个简单的Spring Cloud Dubbo示例: 1. 首先,你需要在项目中引入Spring Cloud Alibaba的依赖,因为Dubbo已被包含在其模块中。在`pom.xml`文件中添加如下依赖: ```xml <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-dubbo</artifactId> </dependency> ``` 2. 定义服务提供者接口(Provider Interface): ```java @Service public interface HelloService { String sayHello(String name); } ``` 3. 创建服务提供者的实现类: ```java @Component public class HelloServiceImpl implements HelloService { @Override public String sayHello(String name) { return "Hello, " + name; } } ``` 4. 在消费者端,创建一个依赖注入HelloService的服务调用组件: ```java @RestController public class ConsumerController { private final HelloService helloService; @Autowired public ConsumerController(HelloService helloService) { this.helloService = helloService; } @GetMapping("/hello") public String consumeHello(@RequestParam("name") String name) { return helloService.sayHello(name); } } ``` 5. 最后,在应用启动配置中启用Dubbo: ```yaml spring: cloud: dubbo: application: name: consumer-service # 消费者服务名 registry: address: zookeeper://localhost:2181 # 注册中心地址 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值