欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SpringCloud框架服务提供者

程序员文章站 2022-03-26 19:01:49
首先说明一下,为了便于讲解,本节之后,如无特殊说明,均是以单点的Eureka进行讲解的。服务提供者和服务消费者服务提供者代码示例这是一个稍微有点复杂的程序。我们使用spring-data-jpa操作h2数据库,同时将该服务注册到注册中心Eureka中。创建一个Maven工程,并在pom.xml中添加如下内容:<?xml version="1.0" encoding="UT......

首先说明一下,为了便于讲解,本节之后,如无特殊说明,均是以单点的Eureka进
行讲解的。

服务提供者和服务消费者
SpringCloud框架服务提供者

服务提供者代码示例
这是一个稍微有点复杂的程序。我们使用spring-data-jpa操作h2数据库,同时将该
服务注册到注册中心Eureka中。

  • 创建一个Maven工程,并在pom.xml中添加如下内容:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="ht
tp://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://m
aven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>microservice-provider-user</artifactId>
<packaging>jar</packaging>
	<parent>
		<groupId>com.itmuch.cloud</groupId>
		<artifactId>spring-cloud-microservice-study</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
<dependencies>
<!-- 添加Eureka的依赖 -->
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-eureka</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-data-jpa</artifactId>
	</dependency>
	<dependency>
		<groupId>com.h2database</groupId>
		<artifactId>h2</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-actuator</artifactId>
	</dependency>
</dependencies>
</project>
  • 配置文件:application.yml
server:
	port: 8000
spring:
	application:
		name: microservice-provider-user # 项目名称尽量用小写
jpa:
	generate-ddl: false
	show-sql: true
	hibernate:
		ddl-auto: none
	datasource: # 指定数据源
		platform: h2 # 指定数据源类型
		schema: classpath:schema.sql # 指定h2数据库的建表脚本
		data: classpath:data.sql # 指定h2数据库的insert脚本
logging:
	level:
		root: INFO
		org.hibernate: INFO
		org.hibernate.type.descriptor.sql.BasicBinder: TRACE
		org.hibernate.type.descriptor.sql.BasicExtractor: TRACE
		com.itmuch.youran.persistence: ERROR
eureka:
	client:
		serviceUrl:
			defaultZone: http://discovery:8761/eureka/ # 指定注册中心的地址
instance:
	preferIpAddress: true
  • 建表语句:schema.sql
drop table user if exists;
create table user (
	id bigint generated by default as identity, 
	username varchar(255), 
	age int, 
	primary key (id));
  • 插库语句:data.sql
insert into user (id, username, age) values (1,'Tom',12);
insert into user (id, username, age) values (2,'Jerry', 23);
insert into user (id, username, age) values (3,'Reno', 44);
insert into user (id, username, age) values (4,'Josh', 55);
  • DAO:
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}

-Controller:

/**
* 作用:
* ① 测试服务实例的相关内容
* ② 为后来的服务做提供
* @author eacdy
*/
@RestController
public class UserController {
	@Autowired
	private DiscoveryClient discoveryClient;
	@Autowired
	private UserRepository userRepository;
	/**
	* 注:@GetMapping("/{id}")是spring 4.3的新注解等价于:
	* @RequestMapping(value = "/id", method = RequestMethod.GET)
	* 类似的注解还有@PostMapping等等
	* @param id
	* @return user信息
	*/
	@GetMapping("/{id}")
	public User findById(@PathVariable Long id) {
		User findOne = this.userRepository.findOne(id);
		return findOne;
	}
	/**
	* 本地服务实例的信息
	* @return
	*/
	@GetMapping("/instance-info")
	public ServiceInstance showInfo() {
		ServiceInstance localServiceInstance = this.discoveryClient.
		getLocalServiceInstance();
		return localServiceInstance;
	}
}
  • 实体类:
@Entity
public class User {
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long id;
	@Column
	private String username;
	@Column
	private Integer age;
	...
	// getters and setters
}
  • 编写Spring Boot启动程序,通过@EnableDiscoveryClient注解,即可将
    microservice-provider-user服务注册到Eureka上面去
@SpringBootApplication
@EnableDiscoveryClient
public class UserApplication {
public static void main(String[] args) {
	SpringApplication.run(UserApplication.class, args);
	}
}

测试
我们依次启动Eureka服务和microservice-provider-user服务。
访问:http://localhost:8761,如下图。我们会发现microservice-provider-user服务
已经被注册到了Eureka上面了。
SpringCloud框架服务提供者
访问:http://localhost:8000/instance-info,返回结果:

{
	"host": "192.168.0.59",
	"port": 8000,
	"metadata": {},
	"uri": "http://192.168.0.59:8000",
	"secure": false,
	"serviceId": "microservice-provider-user"
}

访问:http://discovery:8000/1,返回结果:

{
	"id": 1,
	"username": "Tom",
	"age": 12
}

服务注册到高可用Eureka

如果 Eureka 是高可用的,那么各个微服务配置只需要将 defaultZone 改为如
下即可:

eureka:
	client:
	  serviceUrl:
		defaultZone: http://peer1:8761/eureka/,http://peer2:8762/eureka

本文地址:https://blog.csdn.net/u014131617/article/details/85990408

相关标签: springcloud