38人参与 • 2024-07-28 • Java
springcloud-eureka光速入门
4.1.4.1 在order模块创建 resttemplate对象
🎈边走、边悟🎈迟早会好 |
eureka 是 netflix 开源的一个服务注册和发现工具,主要用于构建分布式系统中的服务发现机制。它在 spring cloud 生态系统中广泛使用,尤其在微服务架构中扮演重要角色。
eureka server:
eureka client:
服务注册:
服务心跳:
服务发现:
负载均衡:
eureka 在 netflix 的微服务架构中得到了广泛应用,并成为 spring cloud 的核心组件之一,用于实现服务注册与发现。
重点
】pom.xml
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<packaging>pom</packaging>
<parent>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-parent</artifactid>
<version>2.2.8.release</version>
</parent>
<dependencymanagement>
<dependencies>
<dependency>
<groupid>org.springframework.cloud</groupid>
<artifactid>spring-cloud-dependencies</artifactid>
<!-- 版本号是按照伦敦地铁站的名字命名的 -->
<version>hoxton.sr4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencymanagement>
pom.xml
<dependencies>
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-web</artifactid>
</dependency>
</dependencies>
引导类
@springbootapplication
public class goodsapplication {
public static void main(string[] args) {
springapplication.run(goodsapplication.class, args);
}
}
application.yml
server:
port: 9001
#指定服务的名称
spring:
application:
name: tingyi-goods
controller编写
@restcontroller
public class goodscontroller {
@requestmapping("/query")
public string query() {
return "查询商品信息!";
}
}
启动并查看效果
pom.xml
<dependencies>
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-web</artifactid>
</dependency>
</dependencies>
引导类
@springbootapplication
public class orderapplication {
public static void main(string[] args) {
springapplication.run(orderapplication.class,args);
}
}
application.yml
server:
port: 9002
#指定服务的名称
spring:
application:
name: tingyi-order
编写controller
@restcontroller
public class ordercontroller {
@requestmapping("/query")
public string query(){
return "查询订单";
}
}
启动并查看效果
在查询订单时,同时也需要获取商品的信息,那么我们如何查询商品信息呢?
我们可以通过spring为我们提供的resttemplate 模板对象 远程调用商品模块中的 控制器。
@configuration
public class resttemplateconfig {
@bean
public resttemplate resttemplate(clienthttprequestfactory factory) {
return new resttemplate(factory);
}
@bean
public clienthttprequestfactory simpleclienthttprequestfactory() {
simpleclienthttprequestfactory factory = new simpleclienthttprequestfactory();
factory.setreadtimeout(5000);//ms
factory.setconnecttimeout(15000);//ms
return factory;
}
}
eureka |
---|
<dependencies>
<dependency>
<groupid>org.springframework.cloud</groupid>
<artifactid>spring-cloud-starter-netflix-eureka-server</artifactid>
</dependency>
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-web</artifactid>
</dependency>
</dependencies>
@springbootapplication
@enableeurekaserver
public class eurekaapplication {
public static void main(string[] args) {
springapplication.run(eurekaapplication.class,args);
}
}
server:
port: 8761 # 端口号
spring:
application:
name: eureka-server
eureka:
instance:
hostname: localhost # localhost
client:
# 表示是否将自己注册到eureka server,默认为true
registerwitheureka: false
# 表示是否从eureka server获取注册信息,默认为true。
# 因为这是一个单点的eureka server,不需要同步其他的eureka server节点的数据,故而设为false
fetchregistry: false
# 设置与eureka server交互的地址,查询服务和注册服务都需要依赖这个地址
serviceurl:
defaultzone: http://${eureka.instance.hostname}:${server.port}/eureka/
启动 eurekaserver并访问
<dependency>
<groupid>org.springframework.cloud</groupid>
<artifactid>spring-cloud-starter-netflix-eureka-client</artifactid>
<version>2.2.2.release</version>
</dependency>
@springbootapplication
@enableeurekaclient
public class goodsapplication {
public static void main(string[] args) {
springapplication.run(goodsapplication.class,args);
}
}
# 指定eureka服务地址
eureka:
client:
service-url:
defaultzone: http://localhost:8761/eureka
# eureka服务中, 显示的当前search业务微服务的访问地址.
instance:
home-page-url: http://localhost:${server.port}
<dependency>
<groupid>org.springframework.cloud</groupid>
<artifactid>spring-cloud-starter-netflix-eureka-client</artifactid>
<version>2.2.2.release</version>
</dependency>
@springbootapplication
@enableeurekaclient
public class orderapplication {
public static void main(string[] args) {
springapplication.run(orderapplication.class,args);
}
}
# 指定eureka服务地址
eureka:
client:
service-url:
defaultzone: http://localhost:8761/eureka
@restcontroller
public class ordercontroller {
@autowired
eurekaclient eurekaclient;
//自动注入resttemplate对象
@autowired
resttemplate template;
@requestmapping("/query")
public string query(){
//根据eureka上注册的服务名称获取实例对象
instanceinfo instanceinfo = eurekaclient.getnextserverfromeureka("tingyi-goods", false);
//获取对应模块的url
string url = instanceinfo.gethomepageurl();
responseentity<string> responseentity = template.getforentity(url + "/query", string.class);
//返回结果
return "查询订单" + "&" + responseentity.getbody();
}
}
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-security</artifactid>
</dependency>
package com.tingyi.config;
import org.springframework.security.config.annotation.web.builders.httpsecurity;
import org.springframework.security.config.annotation.web.configuration.enablewebsecurity;
import org.springframework.security.config.annotation.web.configuration.websecurityconfigureradapter;
/**
* @author tingyi
*/
@enablewebsecurity
public class websecurityconfig extends websecurityconfigureradapter {
@override
protected void configure(httpsecurity http) throws exception {
// 忽略掉/eureka/**
http.csrf().ignoringantmatchers("/eureka/**");
super.configure(http);
}
}
server:
port: 8761 # 端口号
spring:
application:
name: eureka-server
# 指定eureka的用户名和密码
security:
user:
name: root
password: root
eureka:
instance:
hostname: localhost # localhost
client:
# 表示是否将自己注册到eureka server,默认为true
registerwitheureka: false
# 表示是否从eureka server获取注册信息,默认为true。
# 因为这是一个单点的eureka server,不需要同步其他的eureka server节点的数据,故而设为false
fetchregistry: false
# 设置与eureka server交互的地址,查询服务和注册服务都需要依赖这个地址
serviceurl:
defaultzone: http://${eureka.instance.hostname}:${server.port}/eureka/
eureka:
client:
service-url:
defaultzone: http://用户名:密码@localhost:8761/eureka
server:
port: 9001
#指定服务的名称
spring:
application:
name: tingyi-order
# 指定eureka服务地址
eureka:
client:
service-url:
defaultzone: http://root:root@eureka-server1:8761/eureka,http://root:root@eureka-server2:8762/eureka
server:
port: 9002
#指定服务的名称
spring:
application:
name: tingyi-goods
# 指定eureka服务地址
eureka:
client:
service-url:
defaultzone: http://root:root@eureka-server1:8761/eureka,http://root:root@eureka-server2:8762/eureka
server:
port: 8761 # 端口号
spring:
application:
name: eureka-server
security:
user:
name: root
password: root
eureka:
instance:
hostname: localhost # localhost
client:
# 表示是否将自己注册到eureka server,默认为true
registerwitheureka: true
# 表示是否从eureka server获取注册信息,默认为true。
fetchregistry: true
# 设置与eureka server交互的地址,查询服务和注册服务都需要依赖这个地址
serviceurl:
defaultzone: http://eureka-server1:8761/eureka,http://eureka-server2:8762/eureka/
# eureka自我保护机制关闭, 当开启自我保护机制开启后,实例不会删除,
# 导致部分请求会连接不存在的实例,客户端没有做重试或者熔断的话会出大量问题
server:
enable-self-preservation: false
配置域名(只是用来欺骗自己的电脑)
演示eureka集群
先将 多个tingyi_eureka
微服务启动
登录后,可以在任意管理页看到集群信息
eureka:
instance:
lease-renewal-interval-in-seconds: 30 #心跳的间隔
lease-expiration-duration-in-seconds: 90 # 多久没发送,就认为你宕机了
eureka:
client:
registry-fetch-interval-seconds: 30 # 每隔多久去更新一下本地的注册表缓存信息
eureka:
server:
enable-self-preservation: true # 开启自我保护机制, 建议开发阶段设置为false, 不然服务停了, eureka中的信息还在.
🎈众口难调🎈从心就好 |
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论