会泽做网站,网站怎么做付款平台,在电子商务网站建设中需要哪些知识,包装公司logo设计微服务间消息传递
微服务是一种软件开发架构#xff0c;它将一个大型应用程序拆分为一系列小型、独立的服务。每个服务都可以独立开发、部署和扩展#xff0c;并通过轻量级的通信机制进行交互。
应用开发 common模块中包含服务提供者和服务消费者共享的内容 provider模块是…微服务间消息传递
微服务是一种软件开发架构它将一个大型应用程序拆分为一系列小型、独立的服务。每个服务都可以独立开发、部署和扩展并通过轻量级的通信机制进行交互。
应用开发 common模块中包含服务提供者和服务消费者共享的内容 provider模块是服务的提供者用于通过SpringMVC的控制器提供访问接口
服务提供者
RestController
RequestMapping(/users)
public class HelloController {GetMapping(/hello)public String sayHello(RequestParam String username) {if (username null || username.trim().length() 1)username MicroService;return Provider: hello username !;}
}服务消费者
服务消费者通过http协议访问服务提供者可以使用JDK的URL或者使用HttpClient之类的工具但是直接使用工具比较繁琐所以使用SpringBoot提供的RestTemplate进行访问
在主类或者当前应用的配置类上声明RestTemplate
SpringBootApplication
public class ConsumerApplication {public static void main(String[] args) {SpringApplication.run(ConsumerApplication.class, args);}Beanpublic RestTemplate restTemplate() {return new RestTemplate();}
}核心配置主要修改一下访问端口号因为应用的默认端口都是8080会有端口号冲突的问题
server.port7081定义控制器实现访问服务提供者
RestController
RequestMapping(/consumer)
public class ConsumerController {Autowiredprivate RestTemplate restTemplate;GetMapping(/{name})public String test(PathVariable String name){
//RestTemplate针对RESTful中的get/post/delete/put分别提供了对应的方法String res
restTemplate.getForObject(http://localhost:7080/users/hello?username
name, String.class);return res;}
}测试验证 面试题 http协议的访问流程在浏览器中输入一个URL地址都发生了什么事情 http协议的不同版本的区别与https的区别 http协议中get和post之间的区别
Nacos服务治理
Nacos即Naming and Configuration Service是一个用于动态服务发现、配置管理和服务元数据的开源平台。
Nacos的主要功能包括 服务注册和发现Nacos允许服务实例向注册中心注册自己的信息并且其他服务可以通过查询注册中心来发现可用的服务实例 配置管理Nacos提供了一个中心化的配置管理平台可以动态地管理应用程序的配置信息。开发人员可以在运行时更新配置而不需要重启应用程序 服务元数据管理Nacos可以帮助开发人员管理服务的元数据包括版本号、权重、健康状态等。这些元数据可以用于服务路由、负载均衡等场景 动态DNS服务Nacos支持将服务名称解析为具体的网络地址从而实现动态DNS服务的功能
应用开发步骤
服务提供者
需要添加额外的依赖也就是Nacos的客户端
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId
/dependency
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacosdiscovery/artifactId
/dependency添加配置application.properties
# 配置当前应用名称默认情况下向nacos注册的服务名称就是这个名称
spring.application.nameservice-provider
# Nacos 服务发现与注册配置其中子属性 server-addr 指定 Nacos 服务器主机和端口
spring.cloud.nacos.discovery.server-addrlocalhost:8848
# 注册到 nacos 的指定 namespace默认为 public
spring.cloud.nacos.discovery.namespacepublic
# 应用服务 WEB 访问端口
server.port6080添加JavaConfig配置或者在主类上添加注解以启用Nacos客户端
EnableDiscoveryClient
Configuration
public class NacosDiscoveryConfiguration {
}定义服务提供者接口
RestController
RequestMapping(/users)
public class HelloController {GetMapping(/hello)public String sayHello(RequestParam String username) {if (username null || username.trim().length() 1)username MicroService;return Provider: hello username !;}
}服务消费者
依赖
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId
/dependency
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacosdiscovery/artifactId
/dependency添加核心配置application.properties
server.port6081
spring.application.nameservice-consumer
# Nacos 服务发现与注册配置其中子属性 server-addr 指定 Nacos 服务器主机和端口
spring.cloud.nacos.discovery.server-addrlocalhost:8848
# 注册到 nacos 的指定 namespace默认为 public
spring.cloud.nacos.discovery.namespacepublic添加配置类或者在主类上添加注解启用Nacos客户端
EnableDiscoveryClient
SpringBootApplication
public class Consumer1Application {public static void main(String[] args) {SpringApplication.run(Consumer1Application.class, args);}Beanpublic RestTemplate restTemplate() {return new RestTemplate();}
}定义服务消费者
RestController
RequestMapping(/consumer)
public class ConsumerController{ Autowiredprivate RestTemplate restTemplate;Autowiredprivate DiscoveryClient discoveryClient;GetMapping(/{name})public String test(PathVariable String name){
//服务的名称对应的是服务提供者的application.properties中的配置spring.application.nameservice-providerListServiceInstance instances
discoveryClient.getInstances(service-provider); //因为一个服务可以运行在多个节点上或者使用多个进程
//自定义负载均衡策略实现从多个服务提供者实例中选择一个Random rnew Random();ServiceInstance instance
instances.get(r.nextInt(instances.size()));String res
restTemplate.getForObject(instance.getUri()/users/hello?username name,
String.class);return res;}
}验证测试 首先启动nacos中间件 startup -m standalone 对应的管理控制台为http://localhost:8848/nacos 启动服务提供者。在Nacos的webUI中就可以看到服务提供者的注册信息 使用该管理控制台可以针对服务提供者的详细信息进行查看例如节点情况 启动服务消费者 引入负载均衡
在消费方引入负载均衡机制同时简化获取服务提供者信息的流程
Spring Cloud引入组件LoadBalance实现负载均衡
添加依赖
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId
/dependency
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacosdiscovery/artifactId
/dependency
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-loadbalancer/artifactId
/dependencyproperties配置
spring.application.nameservice-consumer
# Nacos 服务发现与注册配置其中子属性 server-addr 指定 Nacos 服务器主机和端口
spring.cloud.nacos.discovery.server-addrlocalhost:8848
# 注册到 nacos 的指定 namespace默认为 public
spring.cloud.nacos.discovery.namespacepublic
server.port6082主类上添加对应的注解
EnableDiscoveryClient
SpringBootApplication
public class Consumer2Application {public static void main(String[] args) {SpringApplication.run(Consumer2Application.class, args);}LoadBalancedBeanpublic RestTemplate restTemplate() {return new RestTemplate();}
}定义对应的控制器需要访问服务提供者
RestController
RequestMapping(/consumer)
public class ConsumerController {Autowiredprivate RestTemplate restTemplate;GetMapping(/{name})public String test(PathVariable String name){
//使用LB后具体的URL地址中使用服务提供者的名称来替代原始的主机名和端口号String res restTemplate.getForObject(http://serviceprovider/users/hello?username name, String.class);return res;}
}验证测试 缓存配置
使用LB从Nacos获取服务的注册信息可以在本地进行缓存。添加配置即可
spring.cloud.loadbalancer.cache.enabledtrue 启用本地缓存可以根据实际情况权衡
spring.cloud.loadbalancer.cache.capacity1000 设置缓存空间大小
spring.cloud.loadbalancer.cache.ttl20 缓存的存活时间单位为s订阅更新
缓存有可能和远程的注册信息不一致所以引入长连接的订阅实现Nacos的主动通知更改
spring.cloud.nacos.discovery.watch.enabledtrue