SpringBoot+分布式Dubbo-zookeeper(基于注解)微服务框架简单例子

Dubbo是什么?

具体点击:https://blog.csdn.net/houshaolin/article/details/76408399

例子:

首先先安装Zookeeper
在Zookeeper官网中下载Zookeeper发行包并解压:

在这里插入图片描述

复制Zookeeper配置文件

将Zookeeper安装目录的conf子文件夹中的zoo_sample.cfg复制一份并重命名为zoo.cfg

在这里插入图片描述

运行Zookeeper

执行Zookeeper安装(解压)目录中bin子文件夹的zkServer.cmd启动Zookeeper

在这里插入图片描述
打开后,这个cmd窗口不要关闭,。。。

代码块

首先创建springBoot项目
使用eclipse创建war项目,pom.xml可能出现说
web.xml is missing and 'failOnMissingWebXml' is set to true

解决方案

有两种:
第一种当然是创建一个web.xml了。
但是更推荐第二种,因为第一种会在项目里有一个无用文件。
第二种是告诉maven,我真的不需要web.xml了

<build>  
    <plugins>  
        <plugin>  
            <groupId>org.apache.maven.plugins</groupId>  
            <artifactId>maven-war-plugin</artifactId>  
            <version>2.6</version>  
            <configuration>  
                <failOnMissingWebXml>false</failOnMissingWebXml>  
            </configuration>  
        </plugin>  
    </plugins>  
</build> 

然后Maven>Update project这样就可以了,其中的version不是必需的。

服务端(提供者)

创建一个名为demo_provider的SpringBoot项目
需要引入的依赖

<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>			 
</dependency>
<dependency>
	<groupId>com.github.sgroschupf</groupId>
	<artifactId>zkclient</artifactId>
	<version>0.1</version>
</dependency>

application.properties 配置:

#为了防止Tomcat端口冲突
server.port=8081
#提供者名字,任意取名
spring.dubbo.application.name=ppp-provider
#2181默认的zookeeper入口
spring.dubbo.registry.address=zookeeper://172.17.1.30:2181
spring.dubbo.protocol.name=dubbo
#提供者提供的端口,任意取
spring.dubbo.protocol.port=9999
#提供者提供的接口
spring.dubbo.scan=com.example.service

提供接口的实现类

@Service
public class StudentServiceImpl implements IStudentService {

	@Override
	public List<Student> getList() {
		List<Student> list = new ArrayList<Student>();
		list.add(new Student(1,"张三",11));
		list.add(new Student(2,"李四",22));
		list.add(new Student(3,"王五",33));
		return list;
	}

	@Override
	public Student getStudentById(Integer id) {
		
		return null;
	}

在这里插入图片描述然后在SpringBoot启动入口启动程序,出现红色框里的内容证明服务端启动成功:
在这里插入图片描述

客户端(消费者)

创建一个名为demo_consumer的SpringBoot项目
需要引入的依赖

<!-- 分布式相关依赖 -->
		<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>
			<type>pom</type>
		</dependency>
		<dependency>
			<groupId>com.github.sgroschupf</groupId>
			<artifactId>zkclient</artifactId>
			<version>0.1</version>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>dubbo</artifactId>
			<version>2.6.0</version>
			<!-- 排除不需要的相关jar包 -->
			<exclusions>
				<exclusion>
					<groupId>org.springframework</groupId>
					<artifactId>spring</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

在这里需要创建一个跟提供者路径相同、类名相同、方法名和返回值相同的接口,有涉及到提供者实体类的话,消费者必须也创建一个跟提供者实体类路径和对象一样的实体类。
在这里插入图片描述

在这里插入图片描述
然后消费者application.properties

server.port=8082
spring.dubbo.application.name=c-consumer
spring.dubbo.registry.address=zookeeper://172.17.1.30:2181
spring.dubbo.scan=com.example.service

使用@Reference注解注入远程服务,使自己的服务层使用远程服务对象调用所需要的方法

package com.qhr.service;

import java.util.List;

import org.springframework.stereotype.Service;

import com.alibaba.dubbo.config.annotation.Reference;
import com.example.entity.Student;
import com.example.service.IStudentService;

@Service
public class StudentServiceImpl {
	//注入分布式的远程服务的对象
	@Reference
	IStudentService service;
	
	public List<Student> list(){
		return service.getList();
	}
}

控制层按平常调用自己的service层返回数据到页面

package com.qhr.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.example.entity.Student;
import com.qhr.service.StudentServiceImpl;

@RestController
public class StudentController {
	
	@Autowired
	StudentServiceImpl service;
	@RequestMapping("/studentList")
	public List<Student> list(){
		return service.list();
	}
}

消费者启动入口:

package com.qhr;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

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

//把远程服务给扫描进来
@DubboComponentScan(basePackages="com.example.service")
@SpringBootApplication
//SpringMVC注解,直接返回给页面一个json数据
@RestController
public class DemoConsumerApplication {

	public static void main(String[] args) {
		SpringApplication.run(DemoConsumerApplication.class, args);
	}
	@RequestMapping("/")
	public String index(){
		return "客户端大爷你好。。。";
	}
}

浏览器访问消费者URL
在这里插入图片描述
出现了远程服务实现类的数据证明消费者已经调用远程服务成功!

进入一个dubbo提供的war文件web程序可以看到我们创建提供者和消费者

资源war文件:https://pan.baidu.com/s/1OvgfUbYICUvBufggyQgzRg 提取码:z2c3

下载完放在Tomcat的webapps路径下即可,然后进入bin目录打开startup.bat文件启动Tomcat服务

启动完后Tomcat将多出一个dubboadmin文件

复制文件名通过访问localhost:8080/dubboadmin

访问时登录用户名:root 密码:root
在这里插入图片描述

确认身份后将进入此页面,然后点击进去即可看到编写提供者和消费者
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

SpringBoot和Dubbo-zookeeper(基于注解)微服务框架简单例子就简单做完了 。。。。

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
将 Spring Boot、Zookeeper、Seata 和 Dubbo 集成在一起可以帮助我们构建分布式事务应用程序。在这里,我将为您提供一些配置步骤: 1. 配置 Zookeeper 在 pom.xml 文件中添加以下依赖项: ```xml <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>5.1.0</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>5.1.0</version> </dependency> ``` 在 application.properties 文件中添加以下配置: ```properties spring.cloud.zookeeper.connect-string=localhost:2181 ``` 2. 配置 Seata 在 pom.xml 文件中添加以下依赖项: ```xml <dependency> <groupId>io.seata</groupId> <artifactId>seata-all</artifactId> <version>1.4.2</version> </dependency> ``` 在 application.properties 文件中添加以下配置: ```properties # Seata配置 seata.tx-service-group=my_test_tx_group spring.cloud.alibaba.seata.tx-service-group=my_test_tx_group spring.cloud.alibaba.seata.enabled=true spring.cloud.alibaba.seata.application-id=seata-dubbo-demo spring.cloud.alibaba.seata.tx-service-group=my_test_tx_group mybatis.configuration.map-underscore-to-camel-case=true ``` 3. 配置 Dubbo 在 pom.xml 文件中添加以下依赖项: ```xml <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.8</version> </dependency> ``` 在 application.properties 文件中添加以下配置: ```properties # Dubbo配置 spring.dubbo.application.name=seata-dubbo-demo spring.dubbo.registry.address=zookeeper://localhost:2181 spring.dubbo.protocol.name=dubbo spring.dubbo.protocol.port=20880 spring.dubbo.scan.base-packages=com.example.demo.service ``` 4. 配置数据源 在 pom.xml 文件中添加以下依赖项: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.6</version> </dependency> ``` 在 application.properties 文件中添加以下配置: ```properties # 数据库配置 spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/seata?useUnicode=true&characterEncoding=utf-8&useSSL=false spring.datasource.username=root spring.datasource.password=123456 ``` 5. 配置 MyBatis 在 pom.xml 文件中添加以下依赖项: ```xml <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.0</version> </dependency> ``` 在 application.properties 文件中添加以下配置: ```properties # MyBatis配置 mybatis.mapper-locations=classpath:mapper/*.xml ``` 6. 编写业务代码 在业务代码中,我们需要使用 @GlobalTransactional 注解来标记全局事务。 ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @DubboReference private AccountService accountService; @Override @GlobalTransactional public void buy(String userId, String productId, int count) { // 扣减账户金额 accountService.decrease(productId, count * 10); // 扣减库存数量 userMapper.decrease(userId, count); // throw new RuntimeException("测试 Seata 分布式事务回滚"); } } ``` 这就是 Spring Boot、Zookeeper、Seata 和 Dubbo 集成的详细配置步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值