springboot 整合dubbo

本文详细介绍了使用Dubbo实现微服务的全过程,包括接口定义、生产者与消费者的配置与实现,以及通过Spring Boot进行整合。同时,展示了如何利用Zookeeper进行服务注册与发现,最后通过测试验证了微服务的正确运行。

1.接口

package com.knife.api;

public interface dubboService {
	public String helloDubbo();
}

2.生产者

pom文件

<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.knife</groupId>
	<artifactId>DubboProviderTest</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>DubboProviderTest</name>
	<url>http://maven.apache.org</url>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.0.RELEASE</version>
		<relativePath /> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<!--引入dubbo环境 -->
		<dependency>
			<groupId>com.alibaba.boot</groupId>
			<artifactId>dubbo-spring-boot-starter</artifactId>
			<version>0.2.0</version>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

配置文件

dubbo:
  application:
    name: dubbo-provider
  registry:
    address: localhost:2181
    protocol: zookeeper
    check: false
  protocol:
    name: dubbo
    port: 30003
  monitor:
    protocol: register
  consumer:
    check: false
    timeout: 3000

server:
  port: 8082

实现类

package com.knife.DubboProviderTest;


import com.alibaba.dubbo.config.annotation.Service;
import com.knife.api.dubboService;

@Service
public class dubboServiceImpl implements dubboService {

	@Override
	public String helloDubbo() {
		// TODO Auto-generated method stub
		
		System.err.println("be called ...");
		
		return "hello dubbo";
	}

}

启动类

package com.knife.DubboProviderTest;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;

@SpringBootApplication
@EnableDubbo
public class App {

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

2.消费者

pom文件

<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.knife</groupId>
	<artifactId>DubboCustomerTest</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>DubboCustomerTest</name>
	<url>http://maven.apache.org</url>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.0.RELEASE</version>
		<relativePath /> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>

		<!--引入dubbo环境 -->
		<dependency>
			<groupId>com.alibaba.boot</groupId>
			<artifactId>dubbo-spring-boot-starter</artifactId>
			<version>0.2.0</version>
		</dependency>

	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

配置文件

dubbo:
  application:
    name:  dubbo-consumer
  registry:
    address: localhost:2181
    protocol: zookeeper
    check: false
  monitor:
    protocol: register
  consumer:
    check:  false
    timeout: 3000

server:
  port: 8081

启动类

package com.knife.DubboCustomerTest;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;

/**
 * Hello world!
 *
 */
@SpringBootApplication
@EnableDubbo
public class App {

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

 

控制类

package com.knife.DubboCustomerTest;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.alibaba.dubbo.config.annotation.Reference;
import com.knife.api.dubboService;

@RestController
public class TestController {

	@Reference
	dubboService ds;

	@RequestMapping("/test")
	public String test() {
		return ds.helloDubbo();
	}

}

4.测试

依次启动zookeeper 生产者 消费者

### Spring Boot 整合 Dubbo 实现 RPC 分布式服务 #### 1. 环境准备 为了在 Spring Boot 中整合 Dubbo,需要先搭建好基础环境。这包括引入必要的依赖项以及配置 Zookeeper 注册中心。 以下是 Maven 配置文件中的依赖部分: ```xml <dependencies> <!-- Spring Boot Starter --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <!-- Dubbo Dependency --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>3.0.8</version> </dependency> <!-- Zookeeper Client --> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>5.2.0</version> </dependency> </dependencies> ``` 上述代码片段展示了如何通过 Maven 添加 Dubbo 和 Zookeeper 的支持[^1]。 #### 2. 配置 Dubbo 和 Zookeeper Dubbo 使用 Zookeeper 来管理服务的注册与发现过程。因此,在 `application.properties` 或 `application.yml` 文件中需定义相应的参数: 对于 `application.properties` 文件: ```properties dubbo.application.name=springboot-dubbo-demo dubbo.registry.address=zookeeper://127.0.0.1:2181 dubbo.protocol.name=dubbo dubbo.protocol.port=20880 ``` 或者使用 YAML 格式的配置文件: ```yaml dubbo: application: name: springboot-dubbo-demo registry: address: zookeeper://127.0.0.1:2181 protocol: name: dubbo port: 20880 ``` 这些设置指定了应用名称、Zookeeper 地址以及协议端口等重要信息[^2]。 #### 3. 创建服务提供方 (Provider) 创建一个简单的接口及其实现类作为服务提供者。例如,假设有一个名为 `DemoService` 的接口: ```java public interface DemoService { String sayHello(String name); } ``` 接着为其编写具体的逻辑实现: ```java import org.apache.dubbo.config.annotation.Service; @Service(version = "1.0.0") // Mark this class as a service provider. public class DemoServiceImpl implements DemoService { @Override public String sayHello(String name) { return "Hello, " + name; } } ``` 这里利用了 Dubbo 提供的注解来标记该类为远程服务的一部分[^3]。 #### 4. 构建服务消费方 (Consumer) 同样地,在另一个模块里声明相同的接口并注入其实例即可完成调用操作。注意不要重复定义具体方法体! ```java import org.apache.dubbo.config.annotation.Reference; import org.springframework.stereotype.Component; @Component public class DemoAction { @Reference(version = "1.0.0", timeout = 5000L) private DemoService demoService; public void execute() { System.out.println(demoService.sayHello("World")); } } ``` 此段落描述了如何借助于 `@Reference` 注解读取远端的服务实例,并执行跨节点间的交互行为。 --- #### 总结 以上就是关于如何在 Spring Boot 应用程序内部嵌入 Apache Dubbo 组件从而达成微服务体系架构下各组件间高效通讯的一个基本流程说明。它涵盖了从项目初始化到实际编码实践的所有必要环节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值