配置Eureka见Eureka Server配置_JiuXu九旭的博客-优快云博客
配置Ribbon
提供者配置
1.pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>provider-user</artifactId>
<parent>
<groupId>com.dxy.springCloud</groupId>
<artifactId>springCloudDocker</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
</project>
2.yml
server:
port: 8080
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/demo?serverTimezone=UTC&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&characterEncoding=UTF-8
username: root
password: root
jpa:
database: mysql
show-sql: true
application:
name: eureka-provider
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
instance:
prefer-ip-address: true
3.启动类
@SpringBootApplication
@EnableEurekaClient
public class ProviderUserApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderUserApplication.class, args);
}
}
4.entity
@Entity
@Data
@ToString
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column
private String name;
@Column
private Integer age;
@Column
private String email;
@Column
private String username;
@Column
private String password;
}
5.dao
@Repository
public interface UserDao extends JpaRepository<User,Long> {
}
6.controller
@RestController
public class UserContorller {
@Autowired
private UserDao userDao;
@GetMapping("/{id}")
public Optional<User> findById(@PathVariable Long id){
Optional<User> findOne = this.userDao.findById(id);
return findOne;
}
}
消费者配置
1.配置pom
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>consumer-user-ribbon</artifactId>
<parent>
<artifactId>springCloudDocker</artifactId>
<groupId>com.dxy.springCloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
<!-- 负载均衡 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
</project>
2.配置yml
server:
port: 8081
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/demo?serverTimezone=UTC&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&characterEncoding=UTF-8
username: root
password: root
jpa:
database: mysql
show-sql: true
application:
name: eureka-consumer
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
instance:
prefer-ip-address: true
3.entity
@Data
@ToString
public class User {
private Long id;
private String name;
private Integer age;
private String email;
private String username;
private String password;
}
4.controller
@RestController
public class UserContorller {
private static final Logger LOGGER = LoggerFactory.getLogger(UserContorller.class);
@Autowired
private RestTemplate restTemplate;
@Autowired
private LoadBalancerClient loadBalancerClient;
@GetMapping("/user/{id}")
public User findById(@PathVariable Long id){
return restTemplate.getForObject("http://eureka-provider/"+id,User.class);
}
@GetMapping("/log-user-instance")
public void logUserInstance(){
ServiceInstance serviceInstance = this.loadBalancerClient.choose("eureka-provider");
// 打印当前选择的是那个节点
UserContorller.LOGGER.info("{},{},{}",serviceInstance.getServiceId()
,serviceInstance.getHost(),serviceInstance.getPort());
}
}
5.启动类
@SpringBootApplication
@EnableEurekaClient
public class ConsumerUserApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerUserApplication.class, args);
}
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
建表语句
CREATE TABLE `user` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`name` varchar(30) DEFAULT NULL COMMENT '姓名',
`age` int(11) DEFAULT NULL COMMENT '年龄',
`email` varchar(50) DEFAULT NULL COMMENT '邮箱',
`username` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '用户名',
`password` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '密码',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1233288665214025731 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
INSERT INTO `user` VALUES (1, 'Jone', 18, 'test1@baomidou.com', '111', '222');
INSERT INTO `user` VALUES (2, 'Alice', 17, NULL, NULL, NULL);
INSERT INTO `user` VALUES (3, 'Jone', 18, 'test1@baomidou.com', NULL, NULL);
ps:
1.yml中application-name的名字不能用下划线不然RestTemplate无法调用。
2.若想多个提供者请复制上面提供者代码并且修改yml中的server-prot。
3.加了@LoadBalanced注解后在调用 @GetMapping("/user/{id}")会实现负载均衡。