springboot连rabbitMQ的简介

开一个
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

https://ithelp.ithome.com.tw/upload/images/20210630/20111603OEHqJq0ZYL.png!

add exchange

https://ithelp.ithome.com.tw/upload/images/20210630/20111603YmPgnoHZ10.png!

add queue里面的bind

https://ithelp.ithome.com.tw/upload/images/20210630/20111603mPYQpAkkVw.png

如果有打进去的话会是这样(还没打 等一下)
https://ithelp.ithome.com.tw/upload/images/20210630/20111603rdXjYPfc5w.png

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.1
    
rabbitmq :
  exchange : yc_topic
  routing_key : yc_Routing_Key
  queues : yc_queues

service :

public interface RabbitService
{

	void sendMessage(String yc);
}
@Slf4j
@Service
public class RabbitServiceImpl implements RabbitService
{

	@Autowired
	private RabbitServiceClient rabbitServiceClient;

	@Value("${rabbitmq.exchange}")
	private String exchange;

	@Value("${rabbitmq.routing_key}")
	private String routingKey;

	@Override
	public void sendMessage(String yc)
	{
		rabbitServiceClient.sendMessage(exchange, routingKey, yc);
	}

}

Client

RabbitServiceClient

@Service
public interface RabbitServiceClient
{
	void sendMessage(String exchangeKey, String routingKey, Object message);
}
@Slf4j
@Component
public class RabbitServiceClientImpl implements RabbitServiceClient
{
	private static final MessagePostProcessor rabbitTemplatePostProcessor = new RabbitTemplatePostProcessor();

	@Autowired
	private RabbitTemplate rabbitTemplate;
	@Override
	public 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
{
	@Override
	public Message postProcessMessage(Message message) throws AmqpException
	{
		message.getMessageProperties().setTimestamp(Date.from(Instant.now()));
		return message;
	}
}

listener:

@Slf4j
@Service
public class CreateWaybillListener
{
	@RabbitListener(queues = "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 就可以了.


<<:  (ISC)² 道德规范(Code of Ethics Canons)

>>:  资料结构与演算法

Day11 iPhone捷径-媒体Part1

Hello 大家, 明明是普通的周末, 不知为何这周一堆人出去玩@@ 我错过了甚麽吗? 今天来讲媒体...

react 大冒险-一些实用的 package-day 30

今天似乎是第 30 天,轻松一下~ 来介绍一些好用的 package (伪)结赛感言 总之晃的一下就...

[Day02] 想要维度提升,先为自己铺路

在与团队成员的定期面谈中,一个很常被问到的问题:「可以给我一点职涯发展的建议吗?我要怎麽做,才能成为...

Xcode(swift,OC)效能分析工具

Xcode(swift,OC)效能分析工具 Instruments — Time Profiler使...