What you're doing wrong is over-complicating it. Twice.
First, you don't need to declare to be externally connectable, since you're sending a message from a content script and not the webpage itself.
Second, it's not an external message either. External messages are for connecting different extensions, not messages within one extension.
Your code should look like this:
content.js
chrome.runtime.sendMessage(
"foo",
function (response) {
console.log(response);
}
);
background.js
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
console.log("background.js got a message")
console.log(request);
console.log(sender);
sendResponse("bar");
}
);