开一个
docker-compose.yml
填入
version: "3.5"services: rabbitmq: image: rabbitmq:management hostname: "y_rabbitmq" ports: - "5672:5672" - "15672:15672" container_name: yc_rabbitmq
然后在那个资料夹打 docker-compose up --build
这样就能起一个rabbitmq了
再来
盖一个rabbitMQ大概如下。
add queue
add exchange
add queue里面的bind
即可
add queue
!
add exchange
!
add queue里面的bind
如果有打进去的话会是这样(还没打 等一下)
java的部分测试的话
pom档+这段
<!-- Spring AMQP for RabbitMQ --> <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit</artifactId> </dependency>
去application.yml +连线资讯 然后把exchange,exchange,queues 等刚刚填在rabbitMQ的资讯写在这
spring : rabbitmq: virtual-host: / username: guest password: guest port: 5672 host: 127.0.0.1example: rabbitmq : exchange : yc_topic routing_key : yc_Routing_Key queues : yc_queues
service :
public interface RabbitService{void sendMessage(String yc);}
@Slf4j@Servicepublic class RabbitServiceImpl implements RabbitService{@Autowiredprivate RabbitServiceClient rabbitServiceClient;@Value("${example.rabbitmq.exchange}")private String exchange;@Value("${example.rabbitmq.routing_key}")private String routingKey;@Overridepublic void sendMessage(String yc){rabbitServiceClient.sendMessage(exchange, routingKey, yc);}}
Client
RabbitServiceClient
@Servicepublic interface RabbitServiceClient{void sendMessage(String exchangeKey, String routingKey, Object message);}
@Slf4j@Componentpublic class RabbitServiceClientImpl implements RabbitServiceClient{private static final MessagePostProcessor rabbitTemplatePostProcessor = new RabbitTemplatePostProcessor();@Autowiredprivate RabbitTemplate rabbitTemplate;@Overridepublic void sendMessage(String exchangeKey, String routingKey, Object message){log.info("Sending one message to host: [{}], port: [{}].", rabbitTemplate.getConnectionFactory().getHost(),rabbitTemplate.getConnectionFactory().getPort());log.info("Sending Routing Key [{}]; exchange [{}]", routingKey, exchangeKey);log.info("message[{}]", message);rabbitTemplate.convertAndSend(exchangeKey, routingKey, message, rabbitTemplatePostProcessor);}}
public class RabbitTemplatePostProcessor implements MessagePostProcessor{@Overridepublic Message postProcessMessage(Message message) throws AmqpException{message.getMessageProperties().setTimestamp(Date.from(Instant.now()));return message;}}
listener:
@Slf4j@Servicepublic class CreateWaybillListener{@RabbitListener(queues = "example.rabbitmq.queues")public void createWaybill(@Payload String yc,@Header(value = AmqpHeaders.RECEIVED_ROUTING_KEY) String receivedRoutingKey){log.info("Reschedule delivery timeslot from FRS: {}; yc: {}", receivedRoutingKey, yc);}}
done.
打controller接sendMessage 就可以了.