引入Spring cloud 和 Fegin包,注意版本和Grails版本对照
dependencyManagement {
dependencies {
dependency group: 'org.springframework.cloud', name: 'spring-cloud-dependencies', version: 'Greenwich.SR4', ext: 'pom'
dependency group: 'com.alibaba.cloud', name: 'spring-cloud-alibaba-dependencies', version: '2.1.1.RELEASE', ext: 'pom'
}
}
dependencies {
...
// https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-openfeign
compile group: 'org.springframework.cloud', name: 'spring-cloud-starter-openfeign', version: '2.1.5.RELEASE'
}
编写服务提供类(grails 里面常用的几个方法和请求方式(get, post, put, delete)),我们最常见的Controller
class DemoController {
static responseFormats = ['json', 'xml']
def index() {
render 'index'
}
def save() {
def record = request.JSON
render 'save: '+ record
}
def update() {
def record = request.JSON
def _id = params.id
render 'update id: ' + _id + ", body: " + record
}
def show() {
def _id = params?.id
render 'show: '+-_id
}
def delete() {
def _id = params?.id
render 'delete: ' + _id
}
}
在服务消费类中,编写对应的接口信息(路径:src/main/groovy/middol/fegin/DemoFegin.groovy)
@FeignClient(name = "grails4nacos-service")
interface DemoFegin {
@GetMapping(value = "/demo")
String index()
@GetMapping(value = "/demo/{id}")
String show(@PathVariable("id") String id)
@PostMapping(value = "/demo")
String save(@RequestBody Map body)
@PutMapping(value = "/demo/{id}")
String update(@PathVariable("id") String id, @RequestBody Map body)
@DeleteMapping(value = "/demo/{id}")
String delete(@PathVariable("id") String id)
}
在服务消费启动类上添加Fegin注解 @EnableFeignClients(basePackages = ["middol.fegin"])
@CompileStatic
@EnableDiscoveryClient
@EnableFeignClients(basePackages = ["middol.fegin"])
class Application extends GrailsAutoConfiguration {
static void main(String[] args) {
GrailsApp.run(Application, args)
}
}
编写消费类
class TestController {
static responseFormats = ['json', 'xml']
@Autowired
DemoFegin demoFegin
def index() {
render demoFegin.index()
}
def show() {
println params?.id
render demoFegin.show(params?.id)
}
def save() {
def _record = request.JSON
render demoFegin.save(_record)
}
def update() {
render demoFegin.update(params?.id, request.JSON)
}
def delete() {
def _id = params?.id
render demoFegin.delete(_id)
}
}
到这里就基本上结束了,这里需要注意些,如果加了认证的,需要在服务之间传递
//控制层获取Authorization认证信息 格式:Bearer XXX-XXX-XXX-XXX
def bearerToken = request.getHeader("Authorization")?.substring("Bearer ".length())
//服务接口
String demo(@RequestHeader("Authorization") String bearerToken, @RequestParam(name = "username", required = false) String username)
系列文章链接: