微服务入门(1)

##今天开始看springCloud的东西。(这个课是慕课网的,我再次记录我的学习过程)

一、Eureka

它是个服务发现框架,主要包括Eureka Server和Eureka Client。

核心功能:服务注册和服务发现

基本架构

  1. Eureka Server提供服务注册与发现
  2. Service Provider 服务提供方,将自身服务注册到Eureka Server从而让 Eureka Server 持有服务的元信息,让其他的服务消费方能够找到当前服务
  3. Service Consumer,服务消费方,从 Eureka Server 上获取注册服务列表,从而能够消费服务
  4. Service Provider/Consumer 相对于 Server,都叫做 Eureka Client

单节点的 Eureka Server 能够实现基础功能,但存在单点故障的问题。只有一个节点,它出了问题,所有的服务信息都会受影响。

作业1:Eureka Server 维护了系统中服务的元信息,这些元信息包含什么你知道吗 ?

(作为菜比的我,连元信息都没听过,元信息和元数据一回事)元数据指用来描述一个文件的特征的系统数据,诸如访问权限、文件拥有者以及文件数据块的分布信息(inode...)等等。

Eureka的元信息有两种:标准元数据和自定义元数据。
       标准元数据:主机名、IP地址、端口号、状态页和健康检查等信息,这些信息都会被发布在服务注册表中,用于服务之间的调用。
      自定义元数据:可以使用eureka.instance.metadata-map配置,这些元数据可以在远程客户端中访问,但是一般不改变客户端行为,除非客户端知道该元数据的含义。

  • 父模块名称
    application:
    name: ad-eureka
  • 微服务端口
    server:
    port: 8000
  • 注册到Eureka Server的服务主机名、是否从EurakaServer获取注册信息、是否将自己注册到Eureka Server、默认的访问其他服务地址。
    eureka:
    instance:
    hostname: localhost //注册到Eureka Server的服务主机名
    client:
    fetch-registry: false //是否从EurakaServer获取注册信息
    register-with-eureka: false //是否将自己注册到Eureka Server
    service-url:
    defaultZone: http://eureka.instance.hostname:{eureka.instance.hostname}:eureka.instance.hostname:{server.port}/eureka/ //默认的访问其他服务地址

(先放上我能看的东西)

作业2:元信息又是怎么存储的呢 ?

      元信息的保存,可能是Eureka Server内部维护着一张表来记录这些元信息,Eureka服务器没有后端存储,但注册表中的服务实例必须发送心跳信号以保持其注册是最新的,所以这可能使内存中完成。客户端可能还拥有一个eureka注册的内存缓存,这样,client不必为每个服务请求都去注册表。

1.创建application.yml,并编辑元数据信息
2.修改配置后,通过mvn clean package -Dmaven.test.skip=ture-U 重新编译打包
3.执行jar包,java -jar

二、微服务架构机器应用场景

点对点:服务之间直接调用,每个微服务都开放Rest API,并调用其他微服务的接口

API-网关:业务接口通过API网关暴露,是所有客户端接口的唯一入口,微服务之间的通信也通过API网关。

 

### Hibernate框架在微服务开发中的入门知识 #### 1. Hibernate与微服务的关系 Hibernate 是一个强大的 ORM(对象关系映射)框架,它通过简化数据库交互操作,使得开发者能够专注于业务逻辑而非底层的 SQL 编写。在微服务架构中,每个服务通常需要与自己的数据库进行交互[^1]。因此,使用 Hibernate 可以显著提高开发效率,并减少手动管理 JDBC 连接的复杂性。 #### 2. Hibernate的核心功能 Hibernate 提供了许多开箱即用的功能,例如缓存、事务管理和查询优化,这些功能对于微服务开发尤为重要。以下是 Hibernate 的一些关键特性: - **缓存**:Hibernate 提供了一级缓存和二级缓存,可以有效减少数据库访问次数,从而提升性能。 - **事务管理**:Hibernate 自动处理事务边界,确保数据的一致性和完整性。 - **HQL 和 Criteria 查询**:Hibernate Query Language (HQL) 和 Criteria API 提供了灵活的查询方式,适用于复杂的业务场景[^1]。 #### 3. 在微服务中集成 Hibernate 在微服务开发中,通常会结合 Spring Boot 使用 Hibernate,Spring Data JPA 是一个很好的选择。以下是一个简单的示例,展示如何在 Spring Boot 中配置 Hibernate: ```java // application.properties 配置文件 spring.datasource.url=jdbc:mysql://localhost:3306/microservice_db spring.datasource.username=root spring.datasource.password=secret spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true ``` ```java // 实体类定义 @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private String email; // Getters and Setters } ``` ```java // Repository 接口 public interface UserRepository extends JpaRepository<User, Long> { List<User> findByName(String name); } ``` #### 4. 测试驱动开发 (TDD) 示例 在微服务开发中,测试驱动开发(TDD)是不可或缺的一部分。以下是一个基于 Spring Boot 和 Hibernate 的单元测试示例: ```java @RunWith(SpringRunner.class) @SpringBootTest public class UserServiceTest { @Autowired private UserService userService; @MockBean private UserRepository userRepository; @Test public void testGetUser() { given(userRepository.findById(1L)).willReturn(Optional.of(new User(1L, "John Doe", "[email protected]"))); User user = userService.getUser(1L); assertNotNull(user); assertEquals("John Doe", user.getName()); } } ``` 此代码片段展示了如何使用 Mockito 模拟 `UserRepository` 的行为,并验证 `UserService` 的逻辑是否正确[^4]。 #### 5. 性能优化 在微服务环境中,性能优化至关重要。以下是一些常见的优化策略: - **批量加载**:通过设置 `fetch` 属性为 `LAZY`,避免不必要的关联表加载。 - **查询优化**:使用 HQL 或 Criteria API 编写高效的查询语句。 - **索引**:确保数据库表的关键字段已建立索引,以加速查询操作[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值