dubbo实例二

远程服务配置:

提供方暴露服务配置:<dubbo:service>,消费方增加引用服用:<dubbo:reference>

1、服务结构:分三个项目(接口类,提供类(实现接口),消费类(调用接口))

2、接口类

定义接口:

//会员服务提供接口
public interface UserService {
	//使用用户id查询用户信息
	public String getUser(Long id);
}

3、实现接口

实现接口:

public class UserServiceImpl  implements UserService{
	//rpc远程调用
	public String getUser(Long id) {
		System.out.println("########################## id:"+id);
		if(id==1){
			return "demo1";
		}else if(id==2){
			return "demo2";
		}
		return "none";
	}

}

启动会员服务:

//服务端提供者再写一个启动类
public class Provider {
	public static void main(String [] args) throws Exception{
		//加载配置文件,创建临时节点
		ClassPathXmlApplicationContext applicationContext=new ClassPathXmlApplicationContext("provider.xml");	
		applicationContext.start();
		System.out.println("会员服务启动---------");
		//能一直保持服务启动
		System.in.read();
	}
}

引入接口jar包(pom.xml)

<dependencies>
  <!-- 引入会员接口 -->
  	<dependency>
  		<groupId>com.demo</groupId>
  		<artifactId>member-interface</artifactId>
  	 	<version>0.0.1-SNAPSHOT</version>
  	</dependency>
  	
  	<!-- 引入dubbo依赖 -->
  	<dependency>
		<groupId>com.alibaba</groupId>
		<artifactId>dubbo</artifactId>
		<version>2.5.6</version>
	</dependency>
	
	<!-- 引入zk客户端 -->
	<dependency>
		<groupId>com.github.sgroschupf</groupId>
		<artifactId>zkclient</artifactId>
		<version>0.1</version>
	</dependency>
  </dependencies>

定义provider.xml(配置文件)

<beans 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 " xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans">
	<!-- 提供方应用信息,用于计算依赖关系 -->
	<dubbo:application name="provider"/>
	<!-- 使用zookeeper注册中心暴露服务地址,首先启动zk -->
	<dubbo:registry address="zookeeper://127.0.0.1:2181"/>
	<!-- 用dubbo协议在29014端口暴露服务 -->
	<dubbo:protocol name="dubbo" port="29014"/>
	<!-- 声明需要暴露的服务接口 -->
	<dubbo:service ref="userService" interface="com.demo.member.service.UserService"/>
	<!-- 具体的实现该接口的bean -->
	<bean class="com.demo.member.service.impl.UserServiceImpl" id="userService"/>
</beans>

4、调用接口服务

//dubbo支持泛化调用,所谓泛化调用,最最直接的表现就是服务消费者不需要有任何接口的实现,就能完成服务的调用。

public class OrderService {
	public static void main(String[] args) {
		ClassPathXmlApplicationContext applicationContext=new ClassPathXmlApplicationContext("consumer.xml");
		applicationContext.start();
		//启动订单服务
		System.out.println("订单服务启动成功");
		UserService userService=(UserService) applicationContext.getBean("userService");
		System.out.println("订单服务调用会员服务开始");
		String result=userService.getUser(1l);
		System.out.println("订单服务调用会员服务结束。。。result:"+result);
	}
}

consumer.xml(消费者配置文件)

<beans 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" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans">
<!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
<dubbo:application name="consumer"/>
<!-- 向 zookeeper 订阅 provider 的地址,由 zookeeper 定时推送 -->
<dubbo:registry address="zookeeper://127.0.0.1:2181" protocol="zookeeper"/>
<!-- 使用dubbo协议调用定义好的api接口,generic="true"表示该接口支持泛型调用 generic="true"-->
<dubbo:reference interface="com.demo.member.service.UserService" id="userService" />
</beans>

pom.xml(消费者pom配置文件)

<dependencies>
  	<!-- 引入会员接口 -->
  	<dependency>
  		<groupId>com.demo</groupId>
  		<artifactId>member-interface</artifactId>
  	 	<version>0.0.1-SNAPSHOT</version>
  	</dependency>
  	
  	<!-- 引入dubbo依赖 -->
  	<dependency>
		<groupId>com.alibaba</groupId>
		<artifactId>dubbo</artifactId>
		<version>2.5.6</version>
	</dependency>
	
	<!-- 引入zk客户端 -->
	<dependency>
		<groupId>com.github.sgroschupf</groupId>
		<artifactId>zkclient</artifactId>
		<version>0.1</version>
	</dependency>
  </dependencies>

运行结果:

zookeeper连接显示:

基于dubbo的代码实例可以通过以下步骤来实现[^2]: 1. 首先,确保你已经安装了Zookeeper,并启动了Zookeeper服务。 2. 创建一个Maven项目,并在pom.xml文件中添加Dubbo和Zookeeper的依赖。 3. 创建一个接口,定义需要暴露的服务方法。 ```java public interface HelloService { String sayHello(String name); } ``` 4. 创建一个实现类,实现接口中定义的服务方法。 ```java public class HelloServiceImpl implements HelloService { @Override public String sayHello(String name) { return "Hello, " + name + "!"; } } ``` 5. 在resources目录下创建一个dubbo配置文件dubbo-provider.xml,配置Dubbo的服务提供者。 ```xml <?xml version="1.0" encoding="UTF-8"?> <dubbo:application name="dubbo-demo-provider" /> <dubbo:registry address="zookeeper://127.0.0.1:2181" /> <dubbo:protocol name="dubbo" port="20880" /> <dubbo:service interface="com.example.HelloService" ref="helloService" /> <bean id="helloService" class="com.example.HelloServiceImpl" /> ``` 6. 创建一个启动类,用于启动Dubbo服务提供者。 ```java public class Provider { public static void main(String[] args) throws IOException { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("dubbo-provider.xml"); context.start(); System.in.read(); } } ``` 7. 创建一个消费者项目,重复步骤2和3,创建一个接口和实现类。 8. 在resources目录下创建一个dubbo配置文件dubbo-consumer.xml,配置Dubbo的服务消费者。 ```xml <?xml version="1.0" encoding="UTF-8"?> <dubbo:application name="dubbo-demo-consumer" /> <dubbo:registry address="zookeeper://127.0.0.1:2181" /> <dubbo:reference id="helloService" interface="com.example.HelloService" /> ``` 9. 创建一个启动类,用于启动Dubbo服务消费者。 ```java public class Consumer { public static void main(String[] args) { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("dubbo-consumer.xml"); HelloService helloService = (HelloService) context.getBean("helloService"); String result = helloService.sayHello("World"); System.out.println(result); } } ``` 以上是一个基于Dubbo的简单代码实例,通过配置Dubbo的服务提供者和消费者,可以实现分布式的服务调用。你可以根据自己的需求进行扩展和定制。如果你想了解更多关于Dubbo使用和原理,可以参考Dubbo的官方文档和源码[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值