c# 微服务学习_学习笔记33-微服务架构的设计

本文介绍了微服务架构中的6种常见设计模式:代理、聚合、链条、聚合链条、数据共享和异步消息。通过一个具体的c#微服务学习案例,详细阐述了如何构建User服务,包括数据库设计、mybatis逆向工程、服务拆分、接口定义、ServiceImpl和Controller的实现,以及消费者如何通过Feign进行链式调用。在实现过程中,强调了实体类的序列化接口实现的重要性。
摘要由CSDN通过智能技术生成

微服务架构6种常用的设计模式

1、代理设计模式

b34736d12bad05e7c14fc7fcd34d9ebf.png

2、聚合设计模式

15e682f3d175f6f7f3a3e5a38d6553c3.png

3、链条设计模式

1a8822f168882527b573914204ab7ff6.png

4、聚合链条设计模式

8d079c7e323e8b92c553b26b858fe7c9.png

5、数据共享设计模式

7a2e66cb5a9fe527ce85db8e4a2e0220.png

6、异步消息设计模式

80842e1e6fce213b9010df29429297ad.png

案例

需求:

03883ad27f993312dce62390ccf10aed.png

数据库设计:略

mybatis逆向工程生成pojo实体类和mapper接口以及mapper映射文件。

先创建User服务,新建User-Service项目和User-Provider项目,添加依赖

User-Service:

33289bab4361e0cfc63a57907cd39110.png

User-Provider:除了springcloud的依赖和springboot的web启动器之外还需要一下一些

a22269eb62310647f925c05676db8978.png

User-Service:将逆向工程生成的pojo实体类放入pojo包中,编写接口

b1dec7664cebb235536d4fbda15a2426.png

9728cb1011cf276e9d3b6c72811daa7c.png

User-Provider:

配置文件:

edfafb054612bb45fccbdbea20b6e7af.png

将mapper映射文件放到classpath下

8ea8aeae72c93fac69d096772287be9b.png

fde388a2e1927cac66e5df6572f92eb0.png

新建一个ServiceImpl,但是不实现UserService的接口,而是使用mapper对数据库进行操作,然后新建controller,在这里面新建类,实现UserService接口,重写其中的方法,调用ServiceImpl中的方法,完成对User-Service的调用和对数据库的操作

启动类:

afd0bd774c1f9148fa3417149de17b8f.png

ServiceImpl:

6d9df5eb3c44495d9c6de050cb9e3d3c.png

Controller:

297d6956df2eb32b5df3f9a00d1a0684.png

其他Product、Order、Trade的操作和这个基本一样,只是业务逻辑稍微有些改变。

创建consumer:添加springcloud和feign,eureka,以及这几个服务的依赖等

5351ef2400a7706baafd49c01f724179.png

启动类:

367d850b1ab196cf5f6db1abbc2a7128.png

配置文件

b83ca2d2cdb8f3ad626ee389c8b4db0a.png

调用这几个服务的接口

e2ec26a7d2d3193de06f2673b2a3f4a6.png

在controller中编写业务逻辑

package com.ebook.controller;


import java.util.List;
import java.util.UUID;

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

import com.ebook.order.pojo.Orders;
import com.ebook.product.service.pojo.Product;
import com.ebook.service.ConsumerOrderService;
import com.ebook.service.ConsumerProductService;
import com.ebook.service.ConsumerTradeService;
import com.ebook.service.ConsumerUserService;
import com.ebook.user.pojo.User;

@RestController
public class ConsumerController {

	@Autowired
	private ConsumerOrderService orderService;
	@Autowired
	private ConsumerProductService productService;
	@Autowired
	private ConsumerTradeService tradeService;
	@Autowired
	private ConsumerUserService userService;
	
	@RequestMapping(value="/create",method=RequestMethod.GET)
	public User create(){
		Integer result = login();
		System.out.println(result);
		User user = new User();
		user.setUserName("结果请看控制台");
		List<Product> productList = productService.findAll();
		for (Product product : productList) {
			System.out.println(product.getName());
		}
		
		List<Orders> orderList = orderService.findAll();
		Orders order = orderList.get(0);
		order.setId(777);
		Orders addOrder = orderService.addOrder(order);
		System.out.println("添加后的orderID:"+addOrder.getId());
		return user;
	}
	
	public Integer login() {
		String userName = "admin";
		String password = "admin";
		User user = userService.login(userName, password);
		if(user!=null) {
			System.out.println("登录成功");
			return user.getId();
		}
		System.out.println("登录失败");
		return -1;
	}
}

链式调用,即使用consumer调用trade服务,在trade服务中调用order服务,在provider中调用provider和在consumer服务中调用provider服务步骤是一样的。

pojo实体类要实现序列化接口。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值