发送消息对象 1.创建一个队列,来承载一个消息对象
@Bean
fun helloQueue1(): Queue {
return Queue("hello1")
}
2.创建一个转换器,将对象转换成json
@Bean
fun jackson2JsonMessageConverter(): MessageConverter {
return Jackson2JsonMessageConverter(mapper)
}
mapper的代码如下
fun initObjectMapper(): ObjectMapper {
val mapper = jacksonObjectMapper()
mapper.registerModules(Jdk8Module(), JavaTimeModule(), KotlinModule())
//禁用时间戳,序列化为标准格式
//如2019-01-14T15:13:46.411
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
return mapper
}
val mapper = initObjectMapper()
fun Any.toJson(): String {
return mapper.writeValueAsString(this)
}
inline fun <reified T : Any> String.fromJson(): T {
return mapper.readValue(this)
}
3.创建一个action,用来发送消息
@GetMapping("/sendEntity")
fun sendEntity(): User {
val u = User(1, "ss", birthday = LocalDateTime.now())
rabbitTemplate.convertAndSend("hello1",u)
return u
}
data class User(var id:Int = 0,var name:String="",var birthday:LocalDateTime? = null)
请求一下/sendEntity,查看hello1队列中的消息
4.创建一个订阅
@Component
@RabbitListener(queues = ["hello1"],concurrency = "1")
class Receiver2 {
@RabbitHandler
fun process(user: User) {
println(Thread.currentThread().id)
println("Receiver2 : [$user]")
}
}
接收到消息
49
Receiver2 : [User(id=1, name=ss, birthday=2019-01-14T15:24:53.335)]