《果然新鲜》电商项目(04)- 注册中心及Feign远程调用
该项目是采用目前比较流行的`SpringBoot`/`SpringCloud`构建微服务电商项目,项目叫 **《果然新鲜》**,实现一套串联的微服务电商项目,能完全掌握该知识,可以在一线城市拿到月薪25+k薪资。完全符合一线城市微服务电商的需求,对中国程序猿学习微服务电商架构,有非常大的帮助,该项目涵盖从微服务电商需求讨论、数据库设计、技术选型、互联网安全架构、整合`SpringCloud`各自组
1.引言
在上一节《果然新鲜电商项目(03)- 父工程配置》主要描述了「果然新鲜」项目的父类公共内容配置。
本文将开始讲解Eureka注册中心的配置以及微服务间的Feign相互调用。
2.Eureka注册中心配置
模块定位:配置基础设施下(guoranshengxian-shop-basics)的注册中心模块(guoranshengxian-shop-basics-eureka)。
2.1.配置maven
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>com.guoranxinxian</groupId>
<artifactId>guoranxinxian-shop-basics</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>guoranxinxian-shop-basics-eureka</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
</project>
2.2.application.yml配置
###服务端口号
server:
port: 8100
###eureka 基本信息配置
eureka:
instance:
###注册到eurekaip地址
hostname: 127.0.0.1
client:
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
###因为自己是为注册中心,不需要自己注册自己
register-with-eureka: false
###因为自己是为注册中心,不需要检索服务
fetch-registry: false
2.3.启动类
package com.guoranshengxian;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class AppEureka {
public static void main(String[] args) {
SpringApplication.run(AppEureka.class, args);
}
}
2.4.启动Eureka
3.微信服务配置
模块定位:接口实现层下(guoranshengxian-shop-service)的微信服务模块(guoranshengxian-shop-service-weixin)。
3.1 配置maven
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>guoranxinxian-shop-service</artifactId>
<groupId>com.guoranxinxian</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>guoranxinxian-shop-service-weixin</artifactId>
</project>
3.2 application.yml配置
###服务启动端口号
server:
port: 8200
###服务名称(服务注册到eureka名称)
spring:
application:
name: guoranxinxian-shop-service-weixin
###服务注册到eureka地址
eureka:
client:
service-url:
defaultZone: http://localhost:8100/eureka
4.会员服务配置
模块定位:接口实现层下(guoranxinxian-shop-service)的会员服务模块(guoranxinxian-shop-service-member)。
4.1.配置maven
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>guoranxinxian-shop-service</artifactId>
<groupId>com.guoranxinxian</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>guoranxinxian-shop-service-member</artifactId>
</project>
4.2.application.yml配置
###服务启动端口号
server:
port: 8300
###服务名称(服务注册到eureka名称)
spring:
application:
name: guoranxinxian-shop-service-member
###服务注册到eureka地址
eureka:
client:
service-url:
defaultZone: http://localhost:8100/eureka
4.3. 启动类
package com.guoranxinxian;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public class AppMember {
public static void main(String[] args) {
SpringApplication.run(AppMember.class, args);
}
}
5.会员服务Feign远程调用微信服务
5.1.微信服务接口配置
模块定位:接口层下(guoranxinxian-shop-service-api)的微信服务模块(guoranxinxian-shop-service-api-weixin)。
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>guoranxinxian-shop-service-api</artifactId>
<groupId>com.guoranxinxian</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>guoranxinxian-shop-service-api-weixin</artifactId>
</project>
5.1.1 定义实体类
模块定位:接口层下(guoranxinxian-shop-service-api)的微信服务模块(guoranxinxian-shop-service-api-weixin)。
package com.guoranxinxian.entity;
import lombok.Data;
@Data
public class AppEntity {
/**
* 应用id
*/
private String appId;
/**
* 应用密钥
*/
private String appSecret;
public AppEntity() {
}
public AppEntity(String appId, String appSecret) {
super();
this.appId = appId;
this.appSecret = appSecret;
}
}
5.1.2 定义接口
模块定位:接口层下(guoranxinxian-shop-service-api)的微信服务模块(guoranxinxian-shop-service-api-weixin)。
package com.guoranxinxian.service;
import com.guoranxinxian.entity.AppEntity;
import org.springframework.web.bind.annotation.GetMapping;
public interface AppService {
/**
* 获取app应用信息
*
* @return
*/
@GetMapping("/getApp")
public AppEntity getApp();
}
5.2 会员服务接口配置
5.2.1.定义会员调用微信接口
1.添加微信接口模块依赖:
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>guoranxinxian-shop-service</artifactId>
<groupId>com.guoranxinxian</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>guoranxinxian-shop-service-member</artifactId>
<dependencies>
<dependency>
<groupId>com.guoranxinxian</groupId>
<artifactId>guoranxinxian-shop-service-api-weixin</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
2.调用微信服务接口:guoranxinxian-shop-service-api-member
package com.guoranxinxian.service;
import com.guoranxinxian.entity.AppEntity;
import org.springframework.web.bind.annotation.GetMapping;
public interface MemberService {
@GetMapping("/memberInvokWeixin")
public AppEntity memberInvokWeixin();
}
5.3 会员服务调用微信服务
模块定位:接口实现层下(guoranxinxian-shop-service)的微信服务模块(guoranxinxian-shop-service-weixin)和会员服务(guoranxinxian-shop-service-member)。
5.3.1 Service父模块添加Feign依赖
接口实现层(guoranxinxian-shop-service)添加maven依赖:
<dependencies>
<!-- springcloud feign组件 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
5.3.2 微信被调用接口实现
package com.guoranxinxian.impl;
import com.guoranxinxian.entity.AppEntity;
import com.guoranxinxian.service.AppService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class AppServiceImpl implements AppService {
@GetMapping("/getApp")
public AppEntity getApp() {
return new AppEntity("1962264482", "ylw666");
}
}
5.3.3 会员调用微信接口实现
模块定位:接口实现层下(guoranxinxian-shop-service)的会员服务(guoranxinxian-shop-service-member)。
1.定义feign接口:
package com.guoranxinxian.feign;
import com.guoranxinxian.service.AppService;
import org.springframework.cloud.openfeign.FeignClient;
@FeignClient(name = "guoranxinxian-shop-service-weixin")
public interface AppServiceFeign extends AppService {
}
2.调用微信接口:
import com.guoranxinxian.entity.AppEntity;
import com.guoranxinxian.feign.AppServiceFeign;
import com.guoranxinxian.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MemberServiceImpl implements MemberService {
@Autowired
private AppServiceFeign appServiceFeign;
@GetMapping("/memberInvokWeixin")
public AppEntity memberInvokWeixin() {
return appServiceFeign.getApp();
}
}
5.4.创建DTO层:guoranxinxian-shop-api-dto
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>guoranxinxian-shop</artifactId>
<groupId>com.guoranxinxian</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>guoranxinxian-shop-api-dto</artifactId>
</project>
5.4.1.创建DTO实体层:guoranxinxian-shop-api-weixin-dto
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>guoranxinxian-shop</artifactId>
<groupId>com.guoranxinxian</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>guoranxinxian-shop-api-dto</artifactId>
<packaging>pom</packaging>
<modules>
<module>guoranxinxian-shop-api-weixin-dto</module>
</modules>
</project>
5.4.2.创建DTO实体层:com.guoranxinxian.weixin.dto
package com.guoranxinxian.weixin.dto;
import lombok.Data;
@Data
public class AppEntity {
/**
* 应用id
*/
private String appId;
/**
* 应用密钥
*/
private String appSecret;
public AppEntity() {
}
public AppEntity(String appId, String appSecret) {
super();
this.appId = appId;
this.appSecret = appSecret;
}
}
6.启动
注意:会员启动类AppMember要加上@EnableFeignClients注解
1.会员服务调用微信服务,浏览器输入:http://localhost:8300/memberInvokWeixin,可以看到远程调用Feign服务成功。
6.总结
更多推荐
所有评论(0)